我正在创建一个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
如果有更优雅的方式,请告诉我。
答案 0 :(得分:0)
您是否已在http://guides.rubyonrails.org/active_record_querying.html中查看“联接”方法?
如果您想要防止重复,请查看同一文档中的“uniq”方法