Rails has_many:通过(带有附加属性)保存问题

时间:2013-03-18 23:29:03

标签: ruby-on-rails ruby ruby-on-rails-3 has-many-through nested-class

我有下面定义的模型结构。 我试图将连接表的附加属性与用户一起保存到计划中。 在rails控制台中,我执行以下操作(用于测试)。我收到了一个群发分配问题,我在这里跟踪了很多帖子,并且那里的所有accepted_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。我以为我能够将User对象直接传递给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

0 个答案:

没有答案