私はユーザーが自分のプロフィールページに質問を作成するフォームを持っています(ユーザーモデルへの追加で、質問モデルとネストされた回答があります)。ユーザーのプロフィールページ/views/users/show.html.erbからquestions_controller.rbの作成アクションに送信されます。それが検証されない場合、私はRailsのデフォルトがフォームをレンダリングすることだと思います。しかし、ユーザーのプロファイルページから質問モデル用のフォームを送信しているので、検証が失敗したときに事前挿入は行われません。ユーザーはフォーム内のすべての情報を再度入力する必要があります。このコンテキストでは、ユーザーの表示ページにフォームを提出してから送信前に入力した情報を記入する方法はありますか?検証に失敗したフォームを再入力する
questions_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
更新 私も
Redirect (: back), :notice => "something went wrong.try again"
作成方法の終わりを変更しました。しかし、私はまだフォームが移入させることができない、と検証エラーメッセージが上がりませんいずれかを示していない、フラッシュ通知のみ。
更新 ユーザコントローラの表示方法は
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>
あなたのUsersControllerではどのように 'show'メソッドが表示されますか?これは、私が理解するように、フォームをあらかじめ入力する方法です。また、views/users/show.html。{erb、haml}ビューはどのように見えますか?そこにパラメータを渡すことができますパスパラメータまたはセッション[]を介して可能性がありますいくつかの変更が必要です。 – moonfly
@moonflyユーザーコントロールからのshowメソッドは、値化されていない場合はフォームを事前入力する必要がありますが、現在は行いません。私はあなたが私が示唆したコードでOPを更新しました。あなたが参照する2つの方法のいずれかで検証しないと、上記のコードを変更してフォームをあらかじめ入力する方法を教えてください。 – Leahcim