我有一个包含两个字段的搜索表单:x,y
执行搜索时,它将查找符合所有条件的记录。但是,将两个条件中的任何一个都设置为“全部”,将其留空。
如果设置为all,我应该将params [:x]和params [:y]设置为什么。
params[:x] = ? unless params[:x]
params[:y] = ? unless params[:y]
users = User.where(["x = ? AND y = ?", params[:x], params[:y]])
答案 0 :(得分:4)
您需要链接您的条件,而不是尝试构建一个如此具体的范围。您可以使用滑动范围技术:
scope = User
if (params[:x].present?)
scope = scope.where(:x => params[:x])
end
if (params[:y].present?)
scope = scope.where(:y => params[:y])
end
users = scope.all
通过这种方式,您可以根据可能存在的参数有条件地使用限制。
答案 1 :(得分:4)
我建议使用哈希来构建你的条件:
conditions = {}
conditions[:x] = params[:x] unless params[:x].blank?
conditions[:y] = params[:y] unless params[:y].blank?
users = User.find(:all, :conditions => conditions)