以下是示例关系:
class User < ActiveRecord::Base
has_one :group, through: :group_membership
has_one :group_membership
end
class Group < ActiveRecord::Base
has_many :users, through: :group_memberships
has_many :group_memberships
end
class GroupMembership < ActiveRecord::Base
belongs_to :group
belongs_to :user
end
为什么我能够执行以下操作?
Group.first.users << User.first
Group.second.users << User.first
我原以为has_one关系会阻止这种情况发生。我不知道的<<
背后是否有一些魔力?
User.first.group
将返回第二组,但两个组都会保持不变。
答案 0 :(得分:1)
如果您添加到关联的has_one
方,User
只能帮助您。当您使用has_one
方法本身时(其中没有定义<<
)。
在此获得所需内容的最佳方式是实际更改关联,使其成为belongs_to
方面的User
。然后User
只能与单个Group
相关联。您可以在user_id
表的group_memberships
字段中使用唯一的数据库索引实现类似的操作。