我有一个搜索表单,我可以使用
在我的食谱模型中搜索一列@countrysearch = Recipe.where(:dish_name => params[:search]).all
因此,当我搜索一道菜时,我会得到一个结果,但是我希望能够在食谱模型中找到另外3列,country_of_origin,难度和preperation_time。
我试过这个
@countrysearch = Recipe.where({:dish_name => params[:search], :country_of_origin => params[:search], :difficulty => params[:search], :preperation_time => params[:search]}).all
但这似乎不起作用
有人可以提出建议吗?
答案 0 :(得分:3)
您的代码使用AND
,但您想要OR
我认为:
@countrysearch = Recipe.where("dish_name = ? OR country_of_origin = ? OR difficulty = ? OR preperation_time = ?",
params[:search],
params[:search],
params[:search],
params[:search]
)
如果您不想使用SQL字符串,可以使用arel_table
:
at = Recipe.arel_table
search = params[:search]
@countrysearch = Recipe.where(at[:dish_name].eq(search).or(at[:country_of_origin].eq(search)).or(at[:difficulty].eq(search)).or(at[:preperation_time].eq(search)))
但是对于当前版本的Rails,我会优先选择第一种方法,因为它更易读。在Rails 5中,您将有更好的方法来进行此类查询。 (如果可以的话,我会更新这篇文章。)