如何在rails中建模以下内容?

时间:2013-08-22 06:53:54

标签: ruby-on-rails activerecord ruby-on-rails-3.2

我使用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

3 个答案:

答案 0 :(得分:1)

你可能想做与你的第一次倾向相反的事情 - Region has_many :setupsSetup 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_manybelongs_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一个地区。