Ruby on Rails的:使用除非验证,JQuery验证
问题描述:
在我的模型,我有以下几点:Ruby on Rails的:使用除非验证,JQuery验证
attr_accessor :address, :located_in_us
validates_length_of :address, :in => 1..50, :message => "Required field, please enter your address."
在我的形式,我有,询问他们是否被设在美国的一个单选按钮。如果他们选择“是”,那么我想要地址字段是必需的。当他们点击“否”时,我有一个隐藏包含地址的DIV的显示/隐藏,但表单永远不会提交,因为该字段即使隐藏,仍然是必需的。
我试过如下:
validates_length_of :address, :in => 1..50, :message => "Required field, please enter your address.", :unless => :located_in_us == "1"
但它似乎并没有工作,因为地址添加下面的JavaScript看起来像这样:
<script type='text/javascript'>$(function() { $('[name="myform[address]"]').rules('add', {"maxlength":50,"required":true,"unless":false,"minlength":1,"messages":{"required":"Required field, please enter your address."}});});</script>
我的问题是...怎么办我制作表格,以便当用户单击“否”单选按钮(他们不居住在美国)时,地址字段不再是必填字段?
答
我认为对于模型验证您的:unless
选项应该是一个lambda
或Proc
:
validates_length_of :address, :in => 1..50, :message => "Required field, please enter your address.", :unless => lambda { |o| o.located_in_us == "1" }
我不知道你是如何被解释什么,但自从:unless
我猜价值评估为false
,就好像它不在那里一样。
对于客户端jQuery规则,我不认为unless
选项存在。相应的选项是depends
:
$(function() {
$('[name="myform[address]"]').rules('add',
{ "maxlength":50,
"required": {
"depends": function(){
return $("input:radio[name=located_in_us]:checked").val() != "1"; // I think this should get the value of the radio button, but double check...
}
},
"messages": {"required":"Required field, please enter your address."}
});
});
我想你给我的,现在的JavaScript看起来像这样:'code'“除非”:{} – ews2001 2012-04-23 14:09:35
@ ews2001我给的代码是在服务器端验证。我用一些我认为可能有用的客户端代码更新了我的答案。让我知道。 – tsherif 2012-04-23 14:50:03
您的javascript是有道理的,但我的问题中显示的行是由对象自动创建并添加到页面源。我如何操作由对象创建的JavaScript,或者至少强制它使用自定义js并关闭默认脚本创建? – ews2001 2012-04-23 17:59:00