0

ネストされたモデルのupdate_attributesを実行しようとしていますが、一括割り当てエラーが発生し続けます。これが私のモデルです:

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をラインナップモデルに追加することで機能すると思いましたが、機能しません。これが私のフォームです:

  - @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

と私のラインナップコントローラーのアクション:

  def update
    @lineup = current_user.lineup
    @lineup.update_attributes(params[:lineup])

そして最後に、エラー:

保護された属性を一括割り当てできません:piece_lineups_attributes

ここで何が欠けていますか?ありがとう!

4

2 に答える 2

3

accepts_nested_attributes_forpiece_lineups_attributes=あなたの場合は、別のモデルに属性を渡すための属性ライターを作成します。attr_accessible :piece_lineups_attributesそのため、Lineup モデルに追加して、一括割り当て可能にする必要があります。

アップデート

これにはもっと良い方法があります。

attr_accessible :piece_idsラインナップモデルに追加する場合は、ビューを次のように変更します

= form_for(@lineup) do |f|
  = f.hidden_field(:piece_ids, :value => piece.id)
  = f.submit

ネストされた属性はまったく必要ありません。

于 2012-06-21T04:09:43.470 に答える
-1

一括割り当てとは、通常、属性ハッシュの一部としてオブジェクトを作成する呼び出しに属性を渡すことを意味します。したがって、そのモデルpiece_lineupのリストにのフィールドを追加するか、次のようにしてみてください。attr_accessors

@lineup = current_user.lineup
@lineup.piece_id = params[:piece_id]
@lineup.save

以下も参照してください。

http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html

于 2012-06-21T03:34:49.343 に答える