【问题标题】:How to simply validate a checkbox in rails如何简单地验证rails中的复选框
【发布时间】:2020-08-29 00:15:58
【问题描述】:

您如何简单地验证在 rails 中选中了一个复选框? 该复选框用于最终用户协议。它位于模态窗口中。

假设我有复选框:

<%= check_box_tag '' %>


我应该在哪里以及如何验证这一点?

我在这里看到了大多数关于 rails 中的复选框验证的帖子,但没有一个适合我的需要。

【问题讨论】:

    标签: ruby-on-rails validation checkbox


    【解决方案1】:

    添加

    validates :terms_of_service, :acceptance => true
    

    你的模型应该这样做。查看here 了解更多详情和选项。

    但是,如果接受条款不是模型表单的一部分,则应使用客户端验证,即 JavaScript,如下所示(在 jQuery 中):

    function validateCheckbox()
    {
        if( $('#checkbox').attr('checked')){
          alert("you have to accept the terms first");
        }
    }
    

    您可以像这样将脚本文件添加到您的视图中:

    &lt;%= javascript_include_tag "my_javascipt_file" %&gt;

    并在点击时触发功能:

    &lt;%= submit_tag "Submit", :onclick: "validateCheckbox();" %&gt;

    编辑:您可以像这样为您的复选框分配一个 ID:check_box_tag :checkbox。 HTML 将如下所示:&lt;input id="checkbox" 有关更多选项,请参阅 these examples

    【讨论】:

    • 在这种情况下,我将如何“命名”复选框?
    • kostja 提供了一个很好的解释,但是我个人更喜欢在客户端和我的控制器中进行验收验证,然后如果被接受,我会将当前时间提交给让我们说用户模型到它的“accepted_conditions_at " 以这种方式我可以轻松维护并让用户重新接受我的条件条款(如果他们因某种原因发生更改)
    • 好的。我现在像其他验证一样向我的模型添加了 'validates :terms_of_service, :acceptance => true'。我的“提交”按钮看起来像这样 ' "btn btn-primary", :onclick => "$('##{dom_id(@confession)} ').submit()" %>'。它正在工作,但我如何添加 jQuery“验证”作为提交按钮的检查?抱歉,我没有做太多 javascript/jQuery。
    • @user2019492 - 添加了更多细节,希望它能澄清问题
    【解决方案2】:

    我能够跳过 jQuery 部分并对其进行验证以解决此问题的帮助。我的方法如下,我在 Rails 5.1.2 & Ruby 2.4.2 上。

    将此代码放入您的 slim、erb 或 haml 中; note 语法可能会略有不同。 下面的行是专门针对苗条的。

    f.check_box :terms_of_service, required: true 
    

    我在模型中使用了 kostja 的部分代码建议。

    validates :terms_of_service, :acceptance => true
    

    【讨论】:

      【解决方案3】:

      添加到已经说过的内容,如果您想添加自定义错误消息,您可以在表单中添加以下内容:

      f.input :terms_of_service, as: :boolean
      

      然后将以下内容添加到您的模型中:

      validates :terms_of_service, acceptance: { message: "must be accepted"}
      

      错误消息默认以字段名称开头,后跟您的自定义消息(例如服务条款 [CUSTOM MESSAGE])。我还发现有用的是在标签中包含指向服务条款的链接,以便用户可以轻松访问它以查看他们同意的内容:

      f.input :terms_of_service, as: :boolean, label: "I agree to the #{link_to "terms of service", [TERMS AND CONDITIONS PATH]}".html_safe
      

      【讨论】:

        猜你喜欢
        • 2012-06-29
        • 1970-01-01
        • 2015-10-18
        • 2019-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-03
        • 2017-12-25
        相关资源
        最近更新 更多