这是我的表格:
= simple_form_for [@post, @comment] do |f|
= f.input :text, :label => false
= f.button :submit
评论嵌套在帖子资源中。评论验证:validates :text, :length => { :minimum => 5 }
评论控制员:
def create
@post = Post.find params[:game_id]
comment = @post.comments.build :user_id => current_user, :text => params[:comment][:text]
comment.save
redirect_to @post
end
表单本身运行正常。如果我输入超过5个字符,则会创建注释。但是如果它更少,我只是被重定向到posts#show
并且表单中没有验证错误(我已经检查了源代码)。
我也尝试填写设计注册表,如果失败,我可以看到错误。
我猜问题是由重定向引起的。但无论如何,我不知道如何解决它。
答案 0 :(得分:5)
如果您重定向用户,则错误将丢失,除非您的应用程序以某种方式记住它们。有两种方法可以解决这个问题:
请勿重定向用户,只需使用render
即可显示包含错误消息的视图。例如,这就是Devise所做的。
重定向用户,但以某种方式传输错误消息。有很多方法可以做到这一点,例如通过在flash中将它们保存为简单字符串或某种序列化形式。但这通常更复杂,只有在需要重定向时才应该这样做。