7

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

可以说我有复选框:

<%= check_box_tag '' %>


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

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

4

3 回答 3

19

添加

validates :terms_of_service, :acceptance => true

你的模型应该这样做。在此处查看更多详细信息和选项。

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

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

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

<%= javascript_include_tag "my_javascipt_file" %>

并在点击时触发功能:

<%= submit_tag "Submit", :onclick: "validateCheckbox();" %>

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

于 2013-04-26T13:36:39.263 回答
3

我能够跳过 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
于 2018-10-17T19:52:37.763 回答
0

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

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
于 2020-08-28T16:15:58.067 回答