[Sql] Rails 4 LIKE-запрос - ActiveRecord добавляет кавычки


Answers

Вместо использования синтаксиса conditions из Rails 2 используйте Rails 4, where вместо этого:

def self.search(search, page = 1 )
  wildcard_search = "%#{search}%"

  where("name ILIKE :search OR postal_code LIKE :search", search: wildcard_search)
    .page(page)
    .per_page(5)
end

ПРИМЕЧАНИЕ: в приведенном выше примере используется синтаксис параметров вместо? placeholder: они должны генерировать тот же sql.

def self.search(search, page = 1 )
  wildcard_search = "%#{search}%"

  where("name ILIKE ? OR postal_code LIKE ?", wildcard_search, wildcard_search)
    .page(page)
    .per_page(5)
end

ПРИМЕЧАНИЕ: использование ILIKE для имени - postgres регистр без ILIKE регистра LIKE

Question

Я пытаюсь сделать подобный запрос, например, так

def self.search(search, page = 1 )
  paginate :per_page => 5, :page => page,
    :conditions => ["name LIKE '%?%' OR postal_code like '%?%'", search, search],   order => 'name'
end

Но когда он запускается, что-то добавляет кавычки, из-за чего вызывается выражение sql

SELECT COUNT(*)
FROM "schools" 
WHERE (name LIKE '%'havard'%' OR postal_code like '%'havard'%')):

Таким образом, вы можете увидеть мою проблему. Я использую Rails 4 и Postgres 9, оба из которых я никогда не использовал, поэтому не уверен, что это и вещь activerecord или, возможно, postgres.

Как я могу настроить это, поэтому мне нравится '%my_search%' в конечном запросе?




.find(:all, where: "value LIKE product_%", params: { limit: 20, page: 1 })



Пытаться

 def self.search(search, page = 1 )
    paginate :per_page => 5, :page => page,
      :conditions => ["name LIKE  ? OR postal_code like ?", "%#{search}%","%#{search}%"],   order => 'name'
  end

Дополнительную информацию см. В docs на условиях AREL.