ユーザーがプロフィールページに質問を作成するためのフォームがあります(ユーザーモデルに加えて、ネストされた回答を持つ質問モデルがあります)。ユーザー プロファイル ページ /views/users/show.html.erb から question_controller.rb の create アクションに送信します。検証されない場合、Railsのデフォルトはフォームをレンダリングすることだと思います(ユーザーが編集できるように、フォームに無効な情報を含めます)。ただし、ユーザー プロファイル ページから質問モデルのフォームを送信しているため、検証に失敗しても事前入力は行われません。ユーザーはフォームにすべての情報を再度入力する必要があります。このコンテキストで、ユーザーの表示ページのフォームに、送信前に入力された情報を入力する方法はありますか?
question_controller
def create
@question = current_user.questions.build(params[:kestion])
if @question.save
redirect_to current_user, :notice => "Successfully created question."
else
###render :action => 'show'
redirect_to current_user
end
end
更新 create メソッドの末尾も変更しました
Redirect ( : back ), :notice => "something went wrong.try again"
しかし、私はまだフォームに入力することができず、検証エラーメッセージも表示されず、フラッシュ通知のみが表示されます.
更新 ユーザーコントローラーの show メソッドは、新しい質問を作成します (ユーザーとともに)
def show
@user = User.find(params[:id])
@question = Question.new
3.times {@question.answers.build}
end
/views/users/show.html.erb
<%= form_for @question do |f| %>
<% if @question.errors.any? %>
<h2><%= pluralize(@question.errors.count, "error") %> prohibited this question
from being saved: </h2>
<ul>
<% @question.errors.full_messages.each do |msg| %>
<li> <%= msg %></li>
<% end %>
</ul>
<% end %>
<p>
<%= f.label :content, "Question"%>
<%= f.text_area :content, :class => 'span4', :rows => 1 %>
</p>
<p>
<%= f.label :link, "QuoraLink" %>
<%= f.text_field :link, :class => 'span4', :rows => 1 %>
</p>
<%= f.fields_for :answers do |builder| %>
<p>
<%= render 'answer_fields', :f => builder %>
</p>
<% end %>
<p><%= link_to_add_fields "Add Answer", f, :answers %></p>
<p><%= f.submit %></p>
<% end %>
質問のパーシャルからレンダリングされた answer_fields のパーシャル
<p class="fields">
<%= f.label :content, "Answer..." %>
<%= f.text_field :content, :class => 'span3', :rows => 1%>
<%= f.label :correctanswer, "Correct" %>
<%= f.check_box :correctanswer, :class => 'span1' %>
<%= link_to_remove_fields "remove answer", f %>
</p>