ユーザーがアンケートの質問を作成できるアプリケーションがあります。次のような URL を設定した場合に期待するページからフォームが送信された場合、すべてが正常に機能します。
resources :surveys
これは、フォームを作成アクションに送信するとサーバーで発生することです。
Started POST "/surveys" for 127.0.0.1 at 2013-02-18 16:32:39 -0800
Processing by SurveysController#create as HTML
ただし、Users コントローラーの show アクションには、Survey コントローラーの 'new' アクションで見つかるはずのコードも含めました。これは、ユーザーが自分のプロファイルから調査の質問を作成できるようにするために行われました。ただし、フォームが送信されると、「GET」リクエストとして送信され、ユーザーコントローラーの表示アクションで処理されるため、明らかに調査が作成されていません
Started GET "/twitterusers/1? whole bunch of data-passed-in-the-url-bar-via-GET-ommitted
Processing by TwitterusersController#show as HTML
これがフォームの外観です (パーシャルは含めていません)。
<%= form_for @survey do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name, "Name your Quiz" %><br />
<%= f.text_field :name %>
<%#= @survey.questions %>
</p>
<%= f.fields_for :questions do |builder| %>
<%= render "question_fields", :f => builder %>
<% end %>
<p><%= link_to_add_fields "Add Question", f, :questions %></p>
<p><%= f.submit %></p>
<% end %>
私がやろうとしていることを達成するためにフォームに加えることができる変更があるかどうか疑問に思っています。これが望ましくない場合 (Rails の慣習に反する場合)、私の状況ではどうするか説明してください。
更新 -- ユーザー コントローラーの show アクションからのコード。調査には多くの質問 (accepts_nested_attributes_for) があり、質問は回答に対して同じことを行います。2 セットの質問を含むフォームを作成します (それぞれに回答用の 4 つのフィールドがあります)。
def show
@twitteruser = Twitteruser.find(params[:id])
2.times do
questions = @survey.questions.build
4.times { questions.answers.build }
end
end
これは、調査コントローラーの作成アクションです (show アクションから送信した場合は送信されません)。
def create
@survey = current_user.surveys.build(params[:survey])
if @survey.save
redirect_to twitteruser_path(current_user), :notice => "Successfully created"
# redirect_to @survey, :notice => "Successfully created survey."
else
render :action => 'new'
end
end