使用ActiveRecord自动填充嵌套字段.用户.组.新建



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)

最新更新