这主要是一个理论问题,但只是想确保我正确地做到了。考虑一个Ruby Rails项目,其中有两个模型,一个是User,另一个是Alliance。
用户只能拥有一个联盟。 联盟可以有很多用户。
这非常简单:a:has_many,:belongs_to relationship。
但是,我觉得使用中间模型是一种更好的方法。那将是:has_many:through:users_alliances,其中users_alliances将是一个中间模型。
您认为最好的方法是什么?
答案 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)
你为什么这么认为?您认为从连接模型中获得什么?
我个人怀疑额外的表格/模型会有所帮助,除非你认为未来一对多会变成多对多。