如何简单地验证在rails中选中复选框? 该复选框用于最终用户协议。它位于模态窗口中。
假设我有复选框:
<%= check_box_tag '' %>
我应该在哪里以及如何验证这一点?
我在这里看过大多数关于rails中复选框验证的帖子,但它们都不符合我的需求。
答案 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