RoR中的has_many / belongs_to关联

时间:2013-10-03 01:51:33

标签: ruby-on-rails activerecord associations has-many

我已阅读关于协会的指南,但我觉得我仍然没有完全理解,所以我想问几个问题,以确定。假设我正在创建一个应用程序,除其他外,将列出世界各地的大城市。我打算有一个从大陆开始的视图,可以过滤掉。所以我将从大陆模型开始。然后是国家模型。现在,在Continent模型中,我将关联定义为has_many:countries。在Country模型中,我将使用belongs_to:continents。我抓住了那么多。所以我的下一个模型将是州/省的模型。我们称之为省,因为这在全世界都比较常见。所以现在我有省模型,我会使用belongs_to:country。同样,各国也会有各种各样的省份。我的第一个问题是,我如何描述省与大陆之间的关联? Has_many通过描述两个模型都有很多的关联。一个省只有一个大陆。 Has_one通过第三个对象描述具有一对一关系的对象之间的关系。同样,情况并非如此,因为欧洲大陆将有许多省份。所以这是我的主要问题..如何通过上下文描述一对多存在的关系。我的第二个问题就是在稍后我添加另一个图层(比如County)的情况下,询问有关为此编写迁移的提示。但主要问题是了解如何表达我所描述的关系。或者,如果他们甚至需要表达。

ETA:如果我要使用has_many_through关联,我是否需要创建连接表(continent_province),或者我可以简单地使用countries表,即has_many:provinces - >通过:国家?

1 个答案:

答案 0 :(得分:1)

不要在某些文档的某些小例子周围弄清楚。关系支持非常灵活。最后,试一试 - 我有一个Tester应用程序,其中包含各种概念证明 - 这就是它的目的。


class Project
  # one-to-many 
  has_many :scenarios
  # linking through scenarios
  has_many :unittests, :through => :scenarios
  # polymorphic relationship, everything can be relation to one or more appls
  has_many :appllinks, :as => :applinkable, :dependent => :destroy
  has_many :appls, :through => :appllinks, :order => 'name'
  blah blah blah
end

class Scenario
  # many-to-one 
  belongs_to :project
  # many-to-many
  has_many :scenariotests 
  has_many :unittests, :through => :scenariotests
  # polymorphic relationship, everything can be relation to one or more appls
  has_many :appllinks, :as => :applinkable, :dependent => :destroy
  has_many :appls, :through => :appllinks, :order => 'name'
  blah blah blah
end

class Unittest
  # many-to-many
  has_many :scenariotests
  has_many :scenarios, :through => :scenariotests
  # polymorphic relationship, everything can be relation to one or more appls
  has_many :appllinks, :as => :applinkable, :dependent => :destroy
  has_many :appls, :through => :appllinks, :order => 'name'
  blah blah blah
end