这是一个人为的例子,假设我想列出一个人有朋友的国家的人口,下面是两个设置。最好在模型中重复数据吗?
有人告诉我,遵循 得墨忒耳法则很重要,例如你告诉狗走路,命令他的腿走路是愚蠢的。
在我的大量经验不足(菜鸟)中,我发现当模型重复数据时,查询会更容易做People.where(:country => friend.country)
,vs 有链式关联的集合(到目前为止这是不可能的):(People.where(:city => { :county => { :region => { :country => friend.city.county.region.country }}})
这真的会帮助这个菜鸟如果您能想象正确的人为设计的 LoD 设置和语法,请在这里理解这个概念,我真的希望我没有使用与得墨忒耳定律无关的示例)我尝试通过应用 LoDdelegate
并被告知我是仍然链接(我是),我能想到的唯一解决方案是重复可以通过关联访问的数据。
但我讨厌重复数据!这是由于遵循了 DHH 的 Rails 教程,我们在其中重新创建了 twitter,他展示了创建关系与重复数据是多么棒。
重复数据是否适合减少关联的链接?
模型,重复数据
class Country < ActiveRecord::Base
has_many :regions
has_many :counties
has_many :cities
has_many :people
end
class Region < ActiveRecord::Base
has_one :country
has_many :counties
has_many :cities
has_many :people
end
class County < ActiveRecord::Base
has_one :country
has_one :region
has_many :cities
has_many :people
end
class City < ActiveRecord::Base
has_one :country
has_one :region
has_one :county
has_many :people
end
class Person < ActiveRecord::Base
has_one :country
has_one :region
has_one :county
has_one :city
has_many :relationships
has_many :friends, :through => :relationships
end
vs 具有链式关联的模型
class Country < ActiveRecord::Base
has_many :regions
end
class Region < ActiveRecord::Base
belongs_to :country
has_many :counties
end
class County < ActiveRecord::Base
belongs_to :region
has_many :cities
end
class City < ActiveRecord::Base
belongs_to :county
end
class Person < ActiveRecord::Base
belongs_to :city
end