Ruby Rails数据库关系 - 一对多

时间:2010-11-25 09:36:55

标签: ruby-on-rails entity-relationship

这主要是一个理论问题,但只是想确保我正确地做到了。考虑一个Ruby Rails项目,其中有两个模型,一个是User,另一个是Alliance。

用户只能拥有一个联盟。 联盟可以有很多用户。

这非常简单:a:has_many,:belongs_to relationship。

但是,我觉得使用中间模型是一种更好的方法。那将是:has_many:through:users_alliances,其中users_alliances将是一个中间模型。

您认为最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

不要使用habtm,它不会使连接成为完全成熟的模型,这正是您所需要的。在联盟方面使用has_many:through,在用户端使用has_one:through。

User
  has_one :alliance_membership
  has_one :alliance, :through => :alliance_membership

AllianceMembership
  belongs_to :user
  belongs_to :alliance

Alliance 
  has_many :alliance_memberships
  has_many :users, :through => :alliance_memberships

我个人更喜欢将班级名称AllianceMembership添加到UserAlliance,但你也可以使用。虽然是imo,但用户联盟却很丑陋。 (has_many / one的另一个优点:通过你可以随意调用连接表/类。)

这使您可以选择在以后轻松更改为具有多个联盟的用户。

答案 1 :(得分:0)

你为什么这么认为?您认为从连接模型中获得什么?

我个人怀疑额外的表格/模型会有所帮助,除非你认为未来一对多会变成多对多。

相关问题