1

我正在开发基本的博客引擎,并且我已经对评论应用了验证,但是当我提交时它不会显示错误,而是会显示默认的 Rails 的 ActiveRecord::RecordInvalid。

我的评论控制器是

def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create!(params[:comment])
redirect_to @post
end

我的帖子/显示视图如下,可以很好地发表评论

 <%= form_for [@post, Comment.new] do |f| %>
<p class="comment-notes">Your email address will not be published. Required fields are marked <span class="required">*</span></p>
<p>
<b><%= f.label :name, "Name *   " %></b><%= f.text_field :name %><br /></p>
<p>
<b><%= f.label :body, "Comment" %></b><%= f.text_area :comment, :cols => 60, :rows => 5 %>
</p>
<p>
  <%= f.submit "Post Comment" %>
</p>

谁能帮我在同一个帖子/显示视图上显示验证错误?

提前致谢

4

2 回答 2

3

代替

@comment = @post.comments.create!(params[:comment])
redirect_to @post

@comment = @post.comments.create(params[:comment])
if @comment.errors.any?
  render "posts/show"
else
  redirect_to @post
end

不像创造,创造!如果验证失败将引发错误

在帖子/节目中

<%= form_for [@post, Comment.new] do |f| %>
  <% if @comment && @comment.errors.any? %>
    <% @comment.errors.full_messages.each do |msg| %>
     <li><%= msg %></li>
    <% end %>
  <% end %>
   ...
于 2013-01-31T14:03:22.380 回答
0

试试这个:

 def create
   @post = Post.find(params[:post_id])
   @comment = @post.comments.new(params[:comment])
   if @post.save
     redirect_to @post
   else
     flash[:error] = "Correct errors"
   end
 end

在 Post 模型中:

accepts_nested_attributes_for :comments

 or

如果您不想制作嵌套模型:

def create
   @post = Post.find(params[:post_id])
   @comment = @post.comments.new(params[:comment])
   if @comment.save
     redirect_to @post
   else
     flash[:error] = "Correct errors"
   end
end
于 2013-01-31T14:31:50.713 回答