0

私はこれについて数日間立ち往生しており、関連する回答をいくつか見つけることができましたが、必要な2つの機能を完全にカバーしているようには見えません.

基本的に、「質問」と「回答」のモデルがあります。質問と同じ数の回答フィールドを表示し、カスタム コントローラーを使用してそれらを作成したいと考えています。また、サインインしていない場合はセッション ID、またはユーザー ID を回答に割り当てたいと考えています (したがって、登録後に誰が回答したかを判断できます)。フィールドを表示することはできましたが、今は保存されません。ビューに「内部エラー」メッセージが表示され、コンソールに例外が表示されるだけです。

!! Unexpected error while processing request: expected Array (got Rack::Utils::KeySpaceConstrainedParams) for param `question'

これは私のモデル/コントローラーがどのように見えるかです:

step1_controller.rb

class Configurator::Step1Controller < ApplicationController
    before_filter :authenticate_user!

  def new
    @questions = Question.includes(:choices).all()
  end

  def create
    Question.update_attributes(params[:question].keys, params[:question].values)
    flash[:notice] = 'Reports were successfully updated.'
    redirect_to root_path
  end

end

models/answer.rb

class Answer < ActiveRecord::Base
  attr_accessible :weight, :user_id, :question_id
  belongs_to :user
  belongs_to :question
end

モデル/質問.rb

class Question < ActiveRecord::Base
  attr_accessible :created_at, :desc, :updated_at, :title, :created_by_id, :updated_by_id, :tag_id, :answers_attributes
  belongs_to :created_by, :class_name => 'User'
  belongs_to :updated_by, :class_name => 'User'
  belongs_to :tag
  has_many :choices
  has_many :answers
  has_many :user, :through => :answers
  accepts_nested_attributes_for :answers
end

ルート.rb

名前空間 :configurator do get "step1", :to => 'step1#new', :as => :step1 post "step1" => "step1#create", :as => :step1 end

見る

<%= form_for :question, :url => configurator_step1_path do -%>
      <% for question in @questions %>
       <%= fields_for "question[]", question do |question_fields| %>
        <%= question_fields.hidden_field :id %>
        <%= question_fields.label :title, question.title %>
        <%= question_fields.fields_for :answers, [Answer.new] do |li_fields| %>
          <%= li_fields.text_field :weight %>
          <% end %>
        <% end %>
        <% end %>
      <%= submit_tag "Create line items" %>
        <% end %>
       <% if false %>
      <%= f.fields_for :answers, [Answer.new]*5 do |li_fields| %>
      <%= li_fields.label :weight %>
      <%= li_fields.text_field :weight %>
         <% end %>
      <br>
   <% end %>
4

1 に答える 1

0

このレールキャストをご覧になることをお勧めしますhttp://railscasts.com/episodes/196-nested-model-form-revised

また、代わりにコントローラーで:

Question.update_attributes(params[:question].keys, params[:question].values)

あなたがすることができます:

Question.update_attributes(params[:question])
于 2013-06-24T15:47:55.377 に答える