我使用Rails 3.2.8和mySql作为db。我有两个模型,设置和区域。我只能有N个区域(N现在是6)并且可以有许多设置,每个设置必须在一个区域中。
最明显的方式似乎是Setup has_one Region。但是,这为每个新设置提供了一个新的区域对象。但是,我希望在设置中重用region对象(这样当它的参数发生变化时,它们会在所有设置中全面改变)而不是为我的每个设置创建一个新的Region。我认为最好的方法是以下
class Setup < ActiveRecord::Base
attr_accessible :name, :region_id
end
class Region < ActiveRecord::Base
attr_accessible :name
end
如果我想在控制器中设置与设置相关的区域
setup = Setup.find(id)
region = Region.find(setup.region_id)
我只是想知道这是否是它的完成方式,或者是否有任何其他方法可以在Rails中使用ActiveRecord捕获它,或者它周围是否有任何简洁的抽象以便我可以执行类似下面的操作?
region = setup.region
答案 0 :(得分:1)
你可能想做与你的第一次倾向相反的事情 - Region has_many :setups
和Setup belongs_to :region
(这需要Setup
拥有:region_id
列,就像你一样思维)。然后,通过Rails关联的魔力,Rails将提供一些链接两个对象的关联方法,例如:
@setup.region # the region associated with that setup
@region.setups # all setups associated with the region
有很多关联方法 - 我建议您阅读Association Basics guid以熟悉它们,特别是has_many
和belongs_to
关联的参考。
答案 1 :(得分:1)
使用关联
设置模型使用
belongs_to :region
和
区域模型
has_many :setups
如下所示: -
class Setup < ActiveRecord::Base
attr_accessible :name
belongs_to :region
end
class Region < ActiveRecord::Base
attr_accessible :name
has_many :setups
end
然后你可以做到
setup = Setup.find(id)
region = setup.region
答案 2 :(得分:0)
听起来像你的设置belongs_to
一个地区。