2

我有下面定义的模型结构。我正在尝试将连接表的附加属性与用户一起保存到计划中。在 Rails 控制台中,我执行以下操作(用于测试)。我遇到了一个大规模分配问题,我在这里关注了很多帖子,所有的 accept_nested_attributes_for 建议都无济于事。如何执行以下操作?

u = User.last
p = Plan.new(:name => 'some name here', :description => 'something here')

p.userPlans.build(:user => u, :is_owner => true) 

# error on the above 'can't mass-assign protected attributes: user'
# would like to do p.userPlans.build for a number of users

p.save

有没有办法将多个用户连同附加的连接表属性一起保存到一个计划中,然后进行一次保存?我应该这样做:

u = User.last
p = Plan.new(:name => 'some name here', :description => 'something here')
p.userPlans.build(:user_id => u.id, :is_owner => true) 
p.save

所以我想要的是一个计划,有几个用户,其中一些用户将具有 is_owner = true 和一些设置为 false。我以为我可以将用户对象直接传递给 userPlans.build?

任何帮助将不胜感激。我看不到我在这里缺少什么或者我正在做的事情可以接受吗?

#user is devise
class User < ActiveRecord::Base
  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, 
                  :remember_me, :token_authenticatable, 
                  :invited, :confirmed_at, :signed_in_count, 
                  :first_name, :last_name, :userPlans_attributes

  has_many :userPlans
  has_many :plans, :through => :userPlans

  accepts_nested_attributes_for :userPlans, :allow_destroy => true
 .
 .
 .

class Plan < ActiveRecord::Base
  attr_accessible :description, :name, :user_id, :userPlans_attributes

  has_many :userPlans
  has_many :users, :through => :userPlans

  accepts_nested_attributes_for :userPlans, :allow_destroy => true

end

class UserPlan < ActiveRecord::Base
  attr_accessible :decision, :is_owner, :plan_id, :token, :user_id

  belongs_to :plan
  belongs_to :user

end
4

0 回答 0