发生错误时如何在嵌套模型中填充表单?

时间:2012-02-19 21:16:04

标签: ruby-on-rails ruby ruby-on-rails-3

运行Rails 3.2.1。

我浏览了Ruby on Rails网站上的“入门”指南。我已经建立了一个博文,有人可以评论这些帖子。

我修改了示例,以便在输入不验证的注释(没有名称或注释文本)时显示错误。

(帖子有多个评论等)

但是,我如何让Rails将这个有问题的评论放回到表单而不是页面?

这是我在评论控制器中的创建方法:

def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(params[:comment])
respond_to do |format|
  if @comment.save
    format.html { redirect_to(@post, :notice => 'Comment was successfully created.') }
  else
    format.html { render 'posts/show' }
  end
end

以下是我发布的show.html.erb:

<%= render @post %>

<h3>Comments</h3>
<%= render @post.comments %>

<h3>Add a comment</h3>
<%= render "comments/form" %>

<p>
<% if user_signed_in? %>
<%= link_to 'Edit', edit_post_path(@post) %> |
 <% end %>
<%= link_to 'Back', posts_path %>
</p>

这是我的评论部分:

<%= form_for([@post, @post.comments.build]) do |f| %>
<%= render "shared/error_messages", :target => @comment %>
<div class="field">
  <%= f.label "Name" %><br />
  <%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :body %><br />
  <%= f.text_area :body %>
</div>
<div class="actions">
 <%= f.submit "Add Comment!" %>
</div>
<% end %>

这是我的评论部分:

 <p>
 <strong><%= comment.name %></strong><br />
 <%= comment.created_at.try(:strftime, "on %A, %B %d %Y at %H:%M:%S") %><br />
 <%= simple_format(h(comment.body), :sanitize => true) %>
 </p>

1 个答案:

答案 0 :(得分:0)

在您从错误中返回时的表单中。

<% if @comment.errors.any? %>
              <div id="errorExplanation">
                <h2><%= pluralize(@comment.errors.count, "error") %> prohibited this post from being saved:</h2>
                <ul>
                <% @comment.errors.full_messages.each do |msg| %>
                  <li><%= msg %></li>
                <% end %>
                </ul>
              </div>
<% end %>