【问题标题】:How to know the page is rendered or redirected in Rails?如何知道页面在 Rails 中呈现或重定向?
【发布时间】:2018-12-24 18:19:32
【问题描述】:

点击帐户表单的“保存”按钮后,页面将呈现给编辑帐户本身,因为验证完成了没有顺利通过。我需要知道该表单在该验证操作之后被重定向或呈现。
请帮忙。提前致谢

【问题讨论】:

  • 你能分享你的控制器代码吗?
  • '我需要知道表单在该验证操作之后被重定向或呈现。'在哪里?
  • @kiddorails 我需要在帐户表格上知道。
  • 如果问题 1) 显示尝试过的代码,并且 2) 在代码中需要帮助的地方,问题会得到更好的答案。例如。在您的情况下:您是否需要控制器、模型、视图中的这些知识?从您的第一个答案的 cmets 中,我似乎了解您在呈现表单时遇到了麻烦?你使用标准的form_for 或类似simple_form 的东西吗?它还有助于为什么您需要它。例如。显示验证或警报,它们可能有完全不同的答案/方法。

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 rendering


【解决方案1】:

一般更新方法是这样的。

def update
  @article = Article.find(params[:id])

  if @article.update(article_params)
    redirect_to @article
  else
    render 'edit'
   end
end

保存时,调用更新方法。检查此方法,如果@article 更新成功,它将重定向到显示页面,否则将呈现编辑页面。

【讨论】:

  • 对不起,我已经在使用这个功能了,我想我没有提供足够的信息。我需要检查它呈现或重定向的表单
【解决方案2】:

一些简单的解决方案:

  • 当您在控制器中决定是重新渲染还是重定向时,还要设置一个实例变量,您可以在视图中查看该变量
  • 渲染表单时,检查你正在编辑的对象是否为valid?(保存成功返回true,否则返回false)

有点不清楚您为什么需要此信息,我希望您已经显示验证错误? Simple-form 将自动执行此操作(在字段上)。如果你自己做,你可以迭代@<your-object>.errors.messages

【讨论】:

    【解决方案3】:

    我认为您所追求的是当您在编辑页面上时是否已运行更新操作。执行此操作的常规方法是检查 @article 对象上的错误:

    <%- if @article.errors.blank? %>
      No errors so hasn't been run through update action
    <% else %>
      Has been run through update and has some errors
    <% end %>
    

    或者,您可以在控制器中添加一个实例变量,然后在您的页面上检查它:

    def update
      @article = Article.find(params[:id])
      @run_update = true
      if @article.update(article_params)
        redirect_to @article
      else
        render 'edit'
       end
    end
    

    查看:

    <%- if @run_update %>
      Has been rendered
    <% end %>
    

    这是因为实例变量在重定向后不会持续存在

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多