我正在研究具有深层嵌套关联的传统rails应用程序。我有一些要求,要求将一些深层嵌套的属性冒泡并显示出来。
目前我正在做这样的事情来显示结果(使用ActiveRecord关联和数组)
model_a
.collection_of_model_b
.map(&:collection_model_c)
.flatten
.map(&:collection_model_d)
.display_field
这种方法适用于测试数据但是一旦我开始使用真实数据,我就开始注意到NilClass错误。
请提供有关我可用于获取此数据的技术,语法和模式的指导。
我已经考虑但尚未追求的一些方法: 1)在每次进入关卡时,在单独的行中分解呼叫,检查nils。 2)使用直接sql(find_by_sql)。
答案 0 :(得分:2)
>> [1, 2, nil, 3].compact
=> [1, 2, 3]
>> [[1, 2], [3, nil], [4]].map(&:compact)
=> [[1, 2], [3], [4]]
答案 1 :(得分:0)
你有任何has_may:通过关联吗?像
class ModelA < ActiveRecord::Base
...
has_many :model_bs
has_many :model_cs, :through => :model_bs
has_many :model_ds, :through => :model_cs
...
end
就我个人而言,我认为这仍然违反了得墨忒耳法,因为ModelA对模型B和B的成员仍然了解很多。 C.但这至少将它抽象出来,现在你可以打电话:
model_a.model_ds.map(&:display_field)