查询包括belongs_to关联

时间:2014-01-05 11:46:17

标签: ruby-on-rails postgresql activerecord ruby-on-rails-4

我正在创建一个webb应用程序,主要是为了学习更多的rails开发,买卖东西,在这种情况下是马匹。该应用程序的一个重要部分是一个“好”的搜索引擎,可以找到您正在寻找的内容。在railscasts的帮助下,我设法进行了文本搜索:

//horse.rb model
def self.text_search(query)
    if query.present?
        where("name @@ :q or description @@ :q", q: query)
    else
        scoped
    end
end

//horses_controller.rb
@horses = Horse.text_search(params[:query])

但马匹属于卖家,我希望能够使用相同的查询搜索该关联。我做了一个非常糟糕的黑客,我查询卖家,然后渲染他们的马,但这将产生重复。

有没有办法在没有重复的情况下做一个好的查询?


我最终这样做了:

//horses_controller.rb
@horses = Horse.text_search(params[:query])
@horses += Horse.seller_search(params[:query])
@horses = @horses.uniq

//horse.rb (model)
def self.text_search(query)
    if query.present?
        where("name @@ :q or description @@ :q", q: query)
    else
        scoped
    end
end

def self.seller_search(query)
    if query.present?
        joins(:seller).where("sellers.name @@ :q", q: query)
    else
        nil
    end
end

如果有更优雅的方式,请告诉我。

1 个答案:

答案 0 :(得分:0)

您是否已在http://guides.rubyonrails.org/active_record_querying.html中查看“联接”方法?

如果您想要防止重复,请查看同一文档中的“uniq”方法