how to avoid mass assignment error with has_many :through relationship
我正在尝试对嵌套模型进行update_attributes,并不断遇到批量分配错误。这是我的模型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | class Lineup < ActiveRecord::Base belongs_to :user has_many :piece_lineups has_many :pieces, through: :piece_lineups accepts_nested_attributes_for :piece_lineups end class Piece < ActiveRecord::Base attr_accessible :cost, :description, :name, :category has_many :piece_lineups has_many :lineups, through: :piece_lineups end class PieceLineup < ActiveRecord::Base attr_accessible :piece belongs_to :piece belongs_to :lineup end |
用户has_one阵容。因此,我认为通过将accepts_nested_attributes_for添加到阵容模型中,它会起作用,但事实并非如此。这是我的表格:
1 2 3 4 5 | - @lineup.piece_lineups.build(:piece => piece) = form_for(@lineup) do |f| = f.fields_for :piece_lineups do |piece_lineup| = piece_lineup.hidden_field(:piece_id, :value => piece.id) = f.submit |
和我的Lineup控制器动作:
1 2 3 | def update @lineup = current_user.lineup @lineup.update_attributes(params[:lineup]) |
最后是错误:
无法批量分配受保护的属性:piece_lineups_attributes
我在这里想念什么?谢谢!
更新
对此有更好的解决方法。
如果将
1 2 3 | = form_for(@lineup) do |f| = f.hidden_field(:piece_ids, :value => piece.id) = f.submit |
您根本不需要嵌套的属性。
质量分配通常意味着将属性传递到调用中,该调用将创建对象作为属性哈希的一部分。因此,将
1 2 3 | @lineup = current_user.lineup @lineup.piece_id = params[:piece_id] @lineup.save |
另请参阅:
http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html