私はこれについて数日間立ち往生しており、関連する回答をいくつか見つけることができましたが、必要な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 %>