Rails - найти условие двух модельных полей - PullRequest
2 голосов
/ 15 июня 2010

Я пытаюсь найти результаты модели, в которой она запрашивает результат двух условий.

У меня есть поисковый тег, который ищет

 Model.find(:all, :conditions => "name LIKE params[search]")

, но я 'Хотелось бы, чтобы поиск нашел все записи, где "name LIKE params [search] или описание LIKE params [search].

Можно ли добавить OR в условие в rails?

или я должен сделать заявление if?

Ответы [ 3 ]

3 голосов
/ 15 июня 2010

Для Rails 2.x вы можете использовать этот запрос, который не подвержен атакам внедрения SQL:

Model.all(:conditions => ["name LIKE ? OR description LIKE ?",
  "%#{params[:search]}%", "%#{params[:search]}%"])
2 голосов
/ 15 июня 2010

В RAILS 2.3 (для помощи с инъекцией используются параметры вместо чистого кода SQL)

Model.all(:conditions=>['name LIKE ? OR name like ?','%'+@term_one+'%', '%'+@term_two+'%'])

Мне также очень нравится использовать Condition Builder для ActiveRecord в проектах RAILS 2.x, потому что вы можете сделать:

Condition.block{|c|
  c.and :published, true
  c.and {|d|
    d.or :full_text, "LIKE", "%#{options[:qs]}%" 
    d.or :full_text, "LIKE", "%#{options[:qs]}%" 
  }
end

Примечание. Пользователям Postgres следует использовать ILIKE (без учета регистра) вместо LIKE.

Примечание 2: Rails 3.0 будет использовать цепочку предложений where, что довольно круто, и вскоре должен быть добавлен оператор OR ActiveRelation GitHub - но он будет выглядеть как User.where (: name => 'bob'). or (: name => 'same')

0 голосов
/ 15 июня 2010

Model.find (: все,: условия => "name LIKE"% # {params [: поиск]}% 'ИЛИ описание типа'% # {params [: search]}% '")

это может сработать для вас.

...