使用ActiveRecord自动填充嵌套字段。 User.Group.New

时间:2012-03-09 18:09:56

标签: ruby-on-rails ruby-on-rails-3 activerecord

user.rb

has_many :groups, :through => :group_members, :conditions => ['banned = ?', false]

group.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吗?

由于

2 个答案:

答案 0 :(得分:0)

我认为您遇到的问题是您的关联不一致。在user.rb中,您有一个has_many :through关系,这意味着用户和组之间的关联将存储在表group_members中。在group.rb中,您有一个belongs_to关联,这意味着关联将存储在名为groups的{​​{1}}上的列中。

当用户可以属于多个组时,您通常会使用user_id类型关联,而组可以包含多个用户(多对多关联)。如果一个组中只能有一个用户,或者一个用户只能属于一个组,则应使用has_many :through类型关联。

我假设您希望用户属于多个组,并且组要拥有多个用户。如果是这种情况,您可以通过将以下内容添加到belongs_to

来修复您的关联
group.rb

答案 1 :(得分:0)

<强> 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)