2

我有一个搜索表单,可以在其中搜索我的食谱模型中的一列

@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

但这似乎也不起作用

任何人都可以提供建议吗?

4

1 回答 1

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

于 2012-11-09T22:24:05.423 回答