1
Class ModelA < ActiveRecord::Base
    has_many :modelb
end
Class ModelB < ActiveRecord::Base
   has_many :modelc
end
Class ModelC < ActiveRecord::Base
   has_many :modeld
   named_scope :due_on, lambda {|date| { :conditions => {:due_date => date}}}
end
Class ModelD
   named_scope :has_feature, lambda {|feature| { :conditions => {:feature => feature}}}
end

次のことはできますか

a = ModelA.find(1)

a.modelb.modelc.due_on(today).modeld.has_feature(somefeature).should return_an_array_of_instances_of_ModelD

そうでない場合、関連するモデル化されたオブジェクトをモデル化されたオブジェクトから参照するためのベスト プラクティスは何ですか。

4

1 に答える 1

0

デメテルの法則を破るのを避け、そのための抽象化を作成したい場合があります。

すなわちa.modelb.ending(today).with_feature(feature)

それについて読んでください:http://devblog.avdi.org/2011/07/05/demeter-its-not-just-a-good-idea-its-the-law/

于 2012-05-17T03:50:50.063 に答える