我有一个Entry模型和一个Photo模型,每张照片,用户都可以提交一个“条目” - 只是一些关于照片的文字。在每张照片的显示页面上,我渲染了该条目的完整表格。在我的entry.rb
文件中,我有以下内容来计算条目的字数:
validate :count_words
def count_words
body_size = body.to_s.scan(/[\w-]+/).size
unless body_size < 300
errors.add(:entry, "Your entry is too long")
end
end
当我测试超过300字的条目时,保存失败,我的控制器重定向回到它们所属的页面。两个问题。控制器重定向时,不会显示第一条错误消息。我用形式渲染了它(它是由脚手架生成的)。
<% if @entry.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@entry.errors.count, "error") %> prohibited this entry from being saved:</h2>
<ul>
<% @entry.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
这是控制器动作,我怀疑问题所在:
def create
@entry = Entry.new(params[:entry])
respond_to do |format|
if @entry.save
format.html { redirect_to(@entry, :notice => 'Your entry was submitted.') }
else
format.html { redirect_to :back }
end
end
end
我不太清楚问题出在哪里。我计划在提交之前在表单上实现一些javascript以进行验证,但我希望将其作为备份。有人能告诉我我做错了吗?
答案 0 :(得分:1)
通常,您希望else
语句执行format.html { render :edit }
而不是redirect :back
。
重定向时,错误不会持续存在(因为它们未保存到数据库或会话中)。