我有下面定义的模型结构。我正在尝试将连接表的附加属性与用户一起保存到计划中。在 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