如何简单地验证rails中的复选框

时间:2013-04-26 13:30:16

标签: ruby-on-rails validation checkbox

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

假设我有复选框:

<%= check_box_tag '' %>


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

我在这里看过大多数关于rails中复选框验证的帖子,但它们都不符合我的需求。

3 个答案:

答案 0 :(得分:17)

添加

validates :terms_of_service, :acceptance => true

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

但是,如果接受条款不是模型表单的一部分,则应使用客户端验证,即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"有关更多选项,请参阅these examples

答案 1 :(得分:2)

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

将此代码放入您的苗条,erb或haml中;注意每种语法可能略有不同。 下面的行专门针对苗条。

f.check_box :terms_of_service, required: true 

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

validates :terms_of_service, :acceptance => true

答案 2 :(得分: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