Rails重定向到422,而不是使用Flash消息进行验证

时间:2016-01-25 00:28:19

标签: ruby-on-rails validation redirect mongoid flash-message

Rails正确处理论坛系统上的验证,确保帖子包含文本。问题是如果验证失败,它会重定向到422而不是重新定向到新操作。以下是rails输出:

Completed 422 Unprocessable Entity in 156ms (Views: 143.4ms)

Mongoid::Errors::Validations (
message:
  Validation of User failed.
summary:
  The following errors were found: Mongoid forums posts is invalid
resolution:
  Try persisting the document with valid data or remove the validations.):
  app/decorators/mongoid_forums/controllers/application_controller_decorator.rb:7:in `update_current_user_time'

我尽力调试它。最终这就是它的表现(根据轨道输出):

  1. 转到创建
  2. 保存失败(因为验证错误)
  3. 重定向到新页面(用户实际上从未看到它,因为下一步就是接管)
  4. 重定向到422页面,用户没有看到他们做错了的新页面
  5. 以下是它的代码: https://github.com/NJayDevelopment/mongoid_forums/blob/master/app/controllers/mongoid_forums/posts_controller.rb#L43

      @post = @topic.posts.build(post_params)
      @post.user = mongoid_forums_user
    
      if @post.save
        @topic.alert_subscribers(mongoid_forums_user.id)
        @topic.forum.increment_posts_count
        flash[:notice] = t("mongoid_forums.post.created")
        redirect_to @topic
      else
        flash.now.alert = t("mongoid_forums.post.not_created")
        render :action => "new"
      end
    

    这种创建模型并保存模型的方法有什么特别的错误吗?我尝试了一些其他解决方案,例如将构建更改为创建或新建,然后设置字段。就我所见,它一直在渲染新的东西,但我没有得到表格。

    最终,我想要的是,当用户尝试制作没有文字的帖子时,会将其重新定向回新的帖子表单,并显示闪存错误。

0 个答案:

没有答案