Rails - 查找两个模型字段的条件

时间:2010-06-15 15:59:53

标签: ruby-on-rails find conditional-statements

我正在尝试查找模型的结果,它将查询作为两个条件的结果。

我有一个寻找

的搜索标签
 Model.find(:all, :conditions => "name LIKE params[search]")

但是我希望搜索找到所有记录“name LIKE params [search]或description LIKE params [search]。

有没有办法在rails中添加OR条件?

或者我应该制作一个if语句?

3 个答案:

答案 0 :(得分:3)

对于Rails 2.x,您可以使用此查询,该查询不容易受到SQL注入攻击:

Model.all(:conditions => ["name LIKE ? OR description LIKE ?",
  "%#{params[:search]}%", "%#{params[:search]}%"])

答案 1 :(得分:2)

在RAILS 2.3中(使用参数而不是纯SQL代码来获取注入帮助)

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

我也非常想在RAILS 2.x项目中使用Condition Builder for ActiveRecord,因为你可以这样做:

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 => '锤')或(:名称=> '相同')

答案 2 :(得分:0)

Model.find(:all,:conditions =>“name LIKE'%#{params [:search]}%'或描述如'%#{params [:search]}%'”)

这可能适合你。