user.rb
has_many :groups, :through => :group_members, :conditions => ['banned = ?', false]
组.rb
belongs_to :user
组控制器:
group = current_user.groups.new(:uuid => group_uuid)
group.inspect的Rails.logger.info是否将group.user_id显示为nil?为什么。。。当我执行current_user.groups.new()时,是否应该自动设置group.user_id?
感谢
我认为您遇到的问题是您的关联不一致。在user.rb
中,您有一个has_many :through
关系,这意味着用户和组之间的关联将存储在表group_members
中。在group.rb
中,您有一个belongs_to
关联,这意味着该关联将存储在groups
上名为user_id
的列中。
当用户可以属于多个组,并且组可以包含多个用户(多对多关联)时,通常会使用has_many :through
类型的关联。如果一个组中只能有一个用户,或者一个用户只能属于一个组,则应使用belongs_to
类型关联。
我假设您希望用户属于多个组,并且组具有多个用户。如果是这种情况,您可以通过在group.rb
中添加以下内容来修复关联
has_many :group_members
has_many :users, :through => :group_members
group.rb
belongs_to :owner, :class => 'User', :foreign_key => :user_id
has_many :group_members
has_many :users, :through => :group_members
创建后,将所有者添加为组成员
user.rb
has_many :own_groups, :class => 'Group', # own groups
has_many :group_members
has_many :groups, :through => :group_members
group_member.rb
belongs_to :group
belongs_to :user
group = current_user.groups.new(:uuid => group_uuid)