我有一个表格供用户在他们的个人资料页面上创建一个问题(除了用户模型之外,还有一个问题模型,带有嵌套的答案)。它从用户个人资料页面 /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"
但是我仍然无法填充表单,并且验证错误消息也没有显示,只有 Flash 通知。
更新用户控制器的 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>