如何在不在rails中的关联中键入每个模型的情况下遍历嵌套关联

时间:2017-03-08 03:09:54

标签: ruby-on-rails ruby

假设我有

ModelA < ActiveRecord::Base
  has_many :modelb
end
ModelB < ActiveRecord::Base
  has_many :modelc
  belongs_to :modela
end
Modelc < ActiveRecord::Base
  has_many :modeld
  belongs_to :modelb
end
Modeld < ActiveRecord::Base
  belongs_to :modelc
end

我希望能够写

modeld.modela

最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

您可以使用has_one :through设置链(您可以使用modela.modelds类似地实施has_many :through

Modeld < ActiveRecord::Base
  belongs_to :modelc
  has_one :modelb, through: :modelc
  has_one :modela, through: :modelb
end

答案 1 :(得分:1)

你试过代表团吗?

delegate :modelb, to: :modelc
delegate :modela, to: :modelb

答案 2 :(得分:0)

最简单的方法是在模型modela中定义方法Modeld

Modeld < ActiveRecord::Base
  belongs_to :modelc

  def modela
     self.modelc.try(:modelb).try(:modela)
  end
end