Rails には、モデルでデメテルの法則違反を回避するための 2 つの優れた方法があります。
最初はこれです:
class Restaurant < ActiveRecord::Base
belongs_to :franchise
delegate :owner, to: :franchise
end
2番目はこれです:
class Restaurant < ActiveRecord::Base
belongs_to :franchise
has_one :owner, through: :franchise
end
違いはなんですか?一部またはすべてのインスタンスで、あるオプションを他のオプションよりも推奨するものはありますか?
私が検出できる唯一の違いは、delegate
オプションが後者のレコードを取得するために 2 つの SQL クエリを生成するようにbelongs_to :through
見えるのに対し、1 つのクエリでそれを行うように見えることです。