【发布时间】:2014-05-19 07:35:00
【问题描述】:
我在 Rails 模型之间建立了关联。
描述product属性的模型共有三种:
Property正在关联模型,每个属性都有一个名称和值。
class Property < AR::Base
belongs_to :product
belongs_to :property_name
belongs_to :property_value
class PropertyName < AR::Base
has_many :properties
validates :name, presence: true, uniqueness: true
class PropertyValue < AR::Base
has_many :properties
validates :value, presence: true, uniqueness: true
通过thinking-sphinx 搜索后,我得到了方面 - property_values id & property_names id 集合。
使用该结果,然后我尝试查找products 的当前列表的所有属性(以继续过滤这些搜索结果)。
在我使用的控制器中:
@property_names = PropertyName
.where(id: property_name_ids)
.includes(:property_values).where('property_values.id IN (?)', property_value_ids)
我的看法:
- @property_names.each do |property_name|
h4 = property_name.name
- property_name.property_values.pluck(:value).uniq.each do |property_value|
= check_box_tag ...
= label_tag ...
因此,急切加载不起作用。 Rails 为数据库生成了很多 (n+1) 个查询。怎么了?为什么包含不起作用?
【问题讨论】:
-
与您的问题无关。您可以重新考虑您的
code。PropertyName和PropertyValue看起来很像Property中的attributes而不是separate models。对我来说这看起来很不合适。 -
@Pavan 是的,它可以是一个字符串。但是thinking-sphinx需要它是一个模型关联=)
-
我对您的问题进行了大量编辑,以试图澄清内容。我仍然很难准确理解你在最后一段中要表达的意思。你能花点时间为我们更新一下吗?我认为这会帮助您更快地得到答案。
-
好的。请稍等
标签: ruby-on-rails ruby ruby-on-rails-4 activerecord