1

ネストされたフォームを機能させようとしていますが、以下のエラーが発生し続けます。

ActiveModel :: MassAssignmentSecurity :: ResponsesController#createのエラー

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

これが私のモデルです...私は何が間違っているのですか?

class Response < ActiveRecord::Base
  attr_accessible :gate_id, :gate_answers_attributes
  belongs_to :gate
  has_many :gate_answers
  accepts_nested_attributes_for :gate_answers
end

class GateAnswer < ActiveRecord::Base
  attr_accessible :prospect_id, :gate_question_id, :content, :response_id
  belongs_to :response
end

そして、DBスキーマの抽出:

create_table "gate_answers", :force => true do |t|
  t.integer  "prospect_id"
  t.integer  "gate_question_id"
  t.text     "content"
  t.datetime "created_at",                      :null => false
  t.datetime "updated_at",                      :null => false
  t.integer  "response_id"
end

create_table "responses", :force => true do |t|
  t.integer  "gate_id"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end

..そして私のコントローラー

# responses_controller.rb

def create
  @response = Response.new(params[:response])

  respond_to do |format|
    if @response.save
      format.html { redirect_to :action => 'index', :gate_id => (params[:response][:gate_id]), notice: 'Response was successfully created.' }
    else
      format.html { render action: "new" }
    end
  end
end


#gate_answers_controller.rb

def create

@gate_answer = GateAnswer.new(params[:gate_answer])

#code below finds URL that user will be redirected to after form is saved
@gate = Gate.find(params[:gate_answer][:gate_id])

  respond_to do |format|
    if @gate_answer.save
      format.html { redirect_to @gate.content_url, notice: 'Redirecting.' }  #redirect to URL per above
    else
      format.html { render action: "new" }
    end
  end
end

私は何が間違っているのですか?

4

2 に答える 2

0

このタイプのフォームを作成する方法は、Railscastsネストモデルフォームパート1およびパート2に詳細に示されています。多分これはあなたを助けますか?

于 2013-01-21T14:21:57.470 に答える
0

ここからフォームオブジェクトのアプローチを試してくださいhttp://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/

于 2013-01-21T12:36:35.043 に答える