2012-04-19 107 views
0

在我的模型,我有以下几点: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> 

我的问题是...怎么办我制作表格,以便当用户单击“否”单选按钮(他们不居住在美国)时,地址字段不再是必填字段?

回答

0

我认为对于模型验证您的:unless选项应该是一个lambdaProc

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."} 
       }); 
}); 
+0

我想你给我的,现在的JavaScript看起来像这样:'code'“除非”:{} – ews2001 2012-04-23 14:09:35

+0

@ ews2001我给的代码是在服务器端验证。我用一些我认为可能有用的客户端代码更新了我的答案。让我知道。 – tsherif 2012-04-23 14:50:03

+0

您的javascript是有道理的,但我的问题中显示的行是由对象自动创建并添加到页面源。我如何操作由对象创建的JavaScript,或者至少强制它使用自定义js并关闭默认脚本创建? – ews2001 2012-04-23 17:59:00