【发布时间】:2012-02-21 17:12:21
【问题描述】:
我正在编写一个博客引擎,所以我有一个帖子视图 (show.html.erb),它显示了一个帖子、cmets 列表和一个 cmets 表单。
我这样称呼表格:
<%= render :partial => 'comments/form', :locals => {:comment => @post.comments.new} %>
我不确定以这种方式传递评论是否正确,但至少我得到了新评论的 post_id。
这是我的表单(cmets 视图上的 _form.html.erb):
<%= form_for comment, :action => "create" do |f| %>
<% if comment.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(comment.errors.count, "error") %> prohibited this comment from being added:</h2>
<ul>
<% comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.hidden_field :post_id %>
<p>
<%= f.label :name %>
<%= f.text_field :name %>
</p>
<p>
<%= f.label :email %>
<%= f.text_field :email %>
</p>
<p>
<%= f.label :url %>
<%= f.text_field :url %>
</p>
<p>
<%= f.label :content %>
<%= f.text_area :content %>
</p>
<p class="no-border">
<%= f.submit "Post", :class => "button" %>
</p>
<% end %>
这个动作:
def create
@comment = Comment.new(params[:comment])
respond_to do |format|
if @comment.save
format.html { redirect_to :back }
else
format.html { redirect_to :back }
end
end
end
有点冗长,但我想添加更多内容。
我可以完美地添加 cmets,但我无法查看验证错误。
我将所有内容留空(我的模型有验证内容),我看到在 create 操作中创建的评论有错误并转到 else 路径。
但是...表单没有显示任何错误。
我认为我有一个带有错误的对象,但是当我重定向回来时,我传递给表单的对象又是一个新对象并且没有错误。
那么,问题出在哪里?
编辑:额外的东西:
我的 show.html.erb 我也有这个(在表格之前):
<ol class="commentlist">
<%= render @post.comments %>
</ol>
所以,当在 show 动作中,我放了额外的变量:
def show
@post = Post.find(params[:id])
@comment = @post.comments.new
看来渲染器也想渲染空注释,并抛出异常。
如何绕过?
【问题讨论】:
标签: ruby-on-rails forms validation