1

我使用 Rails 3.2.8 和 mySql 作为数据库。我有两个模型,设置和区域。我只能有 N 个区域(N 现在是 6 个),并且可以有许多设置,其中每个设置都必须在一个区域中。

最明显的方法似乎是设置 has_one 区域。然而,这为每个新设置提供了一个新的区域对象。但是,我希望在设置中重用区域对象(这样当其参数更改时,它们会针对所有设置全面更改),而不是为我拥有的每个设置创建一个新区域。我认为最好的方法是以下

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
4

3 回答 3

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 指南以熟悉它们,特别是has_manybelongs_to关联的参考。

于 2013-08-22T07:04:08.553 回答
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

于 2013-08-22T07:06:30.307 回答
0

听起来像您的设置belongs_to区域。

于 2013-08-22T07:03:47.400 回答