【问题标题】:Rails long chain model associationsRails 长链模型关联
【发布时间】:2012-03-19 13:27:34
【问题描述】:

嗯,我知道如何处理从一个模型(称为 ModelA)到第二个模型(ModelB)到第三个模型(ModelC)的关联。但是,如果第三个(ModelC)通过第四个(ModelD)与第五个(ModelE)相关联呢?

#ModelA 
has_many :model_bs
has_many :model_cs, :trough => :model_bs

#ModelC
has_many :model_ds
has_many :model_es, :trough => model_ds

问题是:如何通过该链获取与特定 ModelA 记录相关联的 ModelE 记录集合?

【问题讨论】:

  • 我尝试了直接路径 a.model_cs.model_es,但它无法正常工作。
  • 我试过自己写查询,但我不太擅长,看起来太复杂了。

标签: ruby-on-rails model-associations rails-models


【解决方案1】:

ModelA 的实例上调用model_cs 将返回model_cs 的数组。如果您想访问所有 model_es,则需要遍历 model_cs 的数组并将这些结果附加到数组或哈希中。

array1 = @model_a.model_cs.all
array2 = []
array1.each do |x|
  array2 << x.model_es
end

array2 现在包含所有model_es,其最终父级是原始model_a

【讨论】:

  • 谢谢,我正在考虑类似的事情,但认为有更简单的事情。
  • 您可以使用map 缩短代码。以下(未经测试)应该可以工作array = @model_a.model_cs.map{|x| x.model_es}。这做同样的事情,但形式更简洁。
  • 您可以通过使用一些语法糖进一步缩短它:@model_a.model_cs.map(&amp;:model_es)。根据您的要求,您可能还想在结果上调用flattenuniq
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 2018-10-15
相关资源
最近更新 更多