2012-04-19 105 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