【问题标题】:How should a form error page be rendered with Turbolinks 5Turbolinks 5 应该如何呈现表单错误页面
【发布时间】:2016-04-22 01:40:45
【问题描述】:

在 Rails 应用程序中使用新的 Turbolinks 5 - 呈现带有错误消息的表单的最佳方式是什么。文档说:

不要正常提交表单,而是使用 XHR 提交。响应服务器上的 XHR 提交,返回执行 Turbolinks.visit 的 JavaScript 以供浏览器评估。

所以如果我的表单提交了一个远程更新请求,我应该只是做一个 js 表单替换还是 turbolinks 5 有更好的方法?示例 -

控制器:

def update
  @success = @team.update_attributes( team_params )
end

update.js

<% if @success %>
   Turbolinks.visit('<%= teams_path %>', {action: 'replace'});
<% else %>
   $('form').replaceWith('<%= j(render partial: '/teams/form') %>');
<% end %>

是否有更多的 turbolinks 5 方式来处理失败的更新?

【问题讨论】:

    标签: ruby-on-rails forms turbolinks


    【解决方案1】:

    我还在琢磨。我唯一不同的是把条件逻辑放在控制器而不是视图中。

    somethings_controller.rb

    def create
      if @something.save
        redirect_to @something
      else
        render 'errors'
      end
    end
    

    errors.js.erb

    $('form').replaceWith('<%= j(render partial: 'form') %>');
    

    为什么基于控制器的重定向有效?因为in the docs for Turbolinks 5 it says...

    Turbolinks Rails 引擎会自动执行此优化 对于使用 redirect_to 帮助程序重定向的非 GET XHR 请求。

    ...我认为这意味着他们基本上将我们的重定向包装在 Turbolinks.visit 中。好消息是它会为没有 javascript 的用户优雅地降级,而我们不必使用 respond_to 逻辑。

    【讨论】:

    • 奇怪的是,如果我使用 if @something.save 的正常想法;重定向到@something;别的;渲染:新;当表单失败时,它会返回带有错误消息的 new.html.erb 响应,正如我所期望的那样,除了它不会更新视图以显示它。这会好得多;感觉好像我在这里遗漏了一些东西,不得不渲染一个 JS replaceWith 似乎没有必要。
    • 我对您“当表单失败时...”的陈述感到困惑。错误消息是否呈现在屏幕上?你怎么知道错误消息正在通过?
    • 使用 chrome 网络检查器我可以看到,当我提交一个失败的表单时,它会返回一个响应。响应中的 HTML 包含错误消息 HTML,但似乎此返回的响应未在页面上呈现。
    • 您是否使用.js.erb 替换或不替换?
    • 在我的问题的示例中,我是,但从我的进一步测试中使用 render :new 我不是
    【解决方案2】:

    您可以通过查看 gem:/gems/turbolinks-5.0.0.beta2/lib/turbolinks/redirection.rb 来了解 redirect_to 的工作原理

    Turbolinks 尚未处理表单提交,因此您需要明确处理提交和响应(通过远程:true 或其他方式)。这里有一些其他解决方案的讨论:https://github.com/turbolinks/turbolinks/issues/85

    【讨论】:

      猜你喜欢
      • 2014-11-21
      • 2014-02-10
      • 1970-01-01
      • 2014-04-18
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      相关资源
      最近更新 更多