Rails 有两种很好的方法来避免模型中违反得墨忒耳定律。
第一个是这样的:
class Restaurant < ActiveRecord::Base
belongs_to :franchise
delegate :owner, to: :franchise
end
第二个是这样的:
class Restaurant < ActiveRecord::Base
belongs_to :franchise
has_one :owner, through: :franchise
end
有什么区别?在某些或所有情况下,有什么可以推荐一个选项而不是另一个选项吗?
我能检测到的唯一区别是该delegate
选项似乎生成了两个 SQL 查询来获取后一条记录,而belongs_to :through
似乎是在一个查询中完成。