我正在尝试查找模型的结果,它将查询作为两个条件的结果。
我有一个寻找
的搜索标签 Model.find(:all, :conditions => "name LIKE params[search]")
但是我希望搜索找到所有记录“name LIKE params [search]或description LIKE params [search]。
有没有办法在rails中添加OR条件?
或者我应该制作一个if语句?
答案 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]}%'”)
这可能适合你。