【问题标题】:How does rails handle form validations?Rails 如何处理表单验证?
【发布时间】:2015-11-24 01:33:13
【问题描述】:

当一个rails表单在前端失败时,javascript是如何处理的?例如数值错误失败或必需:未满足 true 选项。

我想为此添加一个回调函数。有没有办法在失败时执行一些javascript?

【问题讨论】:

    标签: ruby-on-rails forms ruby-on-rails-4


    【解决方案1】:

    在 Rails 表单上呈现错误时不涉及任何 javascript。错误的显示方式由一个名为field_error_proc 的函数决定,特别是ActionView::Base.field_error_proc。你可以查看 Ryan Bates 的 railcast 了解它

    如果您通过 AJAX 提交表单,您可以为 ajax:success 事件附加一个侦听器。否则我能想象的唯一(丑陋的)方法是做这样的事情:

    $(document).on('app:form-has-errors', function() { //do what you have to do} 并在视图中

    <script>$(document).trigger('app:form-has-errors');</script> 如果表单中的对象有错误 (@your_object.errors.any?)。

    我认为这是不可能的,因为提交和重新呈现错误是完整的 http 请求,它将清除您可能绑定到文档的任何事件。

    【讨论】:

      【解决方案2】:

      Rails 内置验证不在前端(客户端)上运行,而是在服务器上完成。

      如果你想做 javascript 验证,你需要为此找到一个 gem,或者使用一个 jQuery 库,或者自己编写验证代码。

      使用 vanilla Rails 时进行表单验证的正常方式是这样的

      1. 无效的表单内容提交给控制器
      2. 控制器使用内容制作 ActiveRecord 对象
      3. 控制器尝试将对象保存到数据库,启动一系列步骤,首先检查对象的有效性
      4. 模型的验证器说它无效并用错误消息“装饰”对象,指定它在哪些方面无效。
      5. 控制器发现保存失败并呈现其中包含原始表单的视图,为该视图提供对象,现在带有错误消息。
      6. 视图在呈现表单时会检查对象是否有错误消息,如果它看到任何错误消息,它会很有帮助地将它们显示给用户。它还使用用户之前输入的从对象中获取的数据填充字段。

      【讨论】:

        猜你喜欢
        • 2018-06-05
        • 2019-04-09
        • 1970-01-01
        • 1970-01-01
        • 2013-09-08
        • 2010-09-26
        • 1970-01-01
        • 1970-01-01
        • 2015-08-03
        相关资源
        最近更新 更多