【问题标题】:Search multiple colums in model rails 3在模型导轨 3 中搜索多个列
【发布时间】:2012-11-09 22:18:58
【问题描述】:

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

@countrysearch = Recipe.where(:dish_name => params[:search]).all

所以当我搜索一道菜时说千层面我会得到一个结果,但是我希望能够在食谱模型中搜索另外 3 列,country_of_origin、difficult 和 preperation_time。

我试过了

@countrysearch = Recipe.where({:dish_name => params[:search], :country_of_origin => params[:search], :difficulty => params[:search], :preperation_time => params[:search]}).all

但这似乎也不起作用

谁能给点建议?

【问题讨论】:

    标签: ruby-on-rails-3


    【解决方案1】:

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

    【讨论】:

    • 啊,确实如此,现在您已经指出了这一点。非常感谢,现在得到结果:)
    • 如果您想在大型数据库中搜索大量项目,您可能应该考虑使用railscasts.com/episodes/120-thinking-sphinx 或其他搜索引擎。
    • 是的,如果应用程序变得更大,我可能会这样做,但现在它相对较小,所以暂时保持简单,但感谢您的建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多