Ruby on rails 用于搜索的rails连接模型

Ruby on rails 用于搜索的rails连接模型,ruby-on-rails,database-design,ruby-on-rails-3.2,Ruby On Rails,Database Design,Ruby On Rails 3.2,我在概念上遇到了问题,所以我希望我能找到一些关于如何完成这项任务的指导 这个例子有点武断,但我希望它能说明我的目的 3款,已加入 class Manufacturer < ActiveRecord::Base has_many :models end class Model < ActiveRecord::Base belongs_to :manufacturer has_many :editions end class Edition < ActiveRecord

我在概念上遇到了问题,所以我希望我能找到一些关于如何完成这项任务的指导

这个例子有点武断,但我希望它能说明我的目的

3款,已加入

class Manufacturer < ActiveRecord::Base
  has_many :models
end
class Model < ActiveRecord::Base
  belongs_to :manufacturer
  has_many :editions
end
class Edition < ActiveRecord::Base
  belongs_to :model
end
类制造商
我想合并数据,以便搜索任何匹配项

<% @editions.each do |edition| %>
  <% model = edition.model %>
  <% manufacturer = model.manufacturer %>
  <%= "#{manufacturer.name} #{model.name} #{edition.name}" %>

使事情复杂化。为了保持跟踪,我想将其视为3个选项

我看到这一点的方式是使用模糊搜索进行匹配,并在分离匹配时显示tokeninput或类似内容

在我脑海中,我相信eBay可能会做一些类似的事情,作为其快速挂牌销售页面的一部分

思想:
  • Model.find(:all,:joins=>[:editions,:manufacturer])将为我提供所有信息,但这不能扩展到第四个模型
  • 假设我需要在搜索表单或其他形式中使用这些捕获,我需要在文本字段和控制器中将它们分开
  • 我认为另一种选择是将其存储在单个表中,或者永久存储,或者作为查找表存储。其中的单个选择包含收集所有信息的引用

然后像

class Search < ActiveRecord::Base
    has_one :manufacturer
    has_one :model
    has_one :edition
end
类搜索
如果我理解你的问题,那么以下内容如何:

@editions = Edition.joins(model: :manufacturer)
  .where("models.name = :q OR manufacturers.name = :q OR editions.name = :q", q: params[:q])

因此,是的,您可以通过连接来实现这一点,而不是将其存储在单个表中。 为了让它变得超级简单,我会使用厄尼·米勒(Ernie Miller)的挤压宝石

它允许这种语法:

Edition.joins{ model.manufacturer }.where{ (edition.name =~ "%#{params[:q]}%") || ( edition.model.name =~ "%#{params[:q]%}" || ( edition.model.manufacturer.name =~ "%#{prams[:q]}%" ) }
如果表变大,这可能是连接的性能问题。
如果是这种情况,那么使用ElasticSearch为您的模型编制索引将消除这种情况。



当然,还有其他全文搜索引擎,Solr,Sphinx,我不确定我是否理解你在这里试图实现的目标,你能进一步解释一下吗?另外,根据我认为你在问的问题。。。性能方面,您可能需要使用全文搜索引擎,如ElasticSearch,并添加“轮胎”图标,以显示我的想法(我希望如此)。谢谢。我想我错过了斯奎尔的演出!看起来像是固溶体。我想我可能把这个过程复杂了很多;直到午夜我才真正坐下来讨论这件事,所以这就是我的责任所在。谢谢