搜索模型导轨中的多个列3

时间:2012-11-09 22:18:59

标签: ruby-on-rails-3

我有一个搜索表单,我可以使用

在我的食谱模型中搜索一列
@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

但这似乎不起作用

有人可以提出建议吗?

1 个答案:

答案 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中,您将有更好的方法来进行此类查询。 (如果可以的话,我会更新这篇文章。)