2012-04-19 9 views
0

、私は以下の持っている場合を除き使用:私のフォームでルビー:検証のために、jQueryの検証が私のモデルでは

attr_accessor :address, :located_in_us 

validates_length_of :address, :in => 1..50, :message => "Required field, please enter your address." 

、私は彼らが米国に位置しているかどうかを尋ねるラジオボタンを持っています。彼らが "はい"を選択した場合、私はアドレスフィールドが必要になります。 「いいえ」をクリックすると、アドレスを含むDIVを非表示にする表示/非表示がありますが、フィールドは非表示になっていても依然として必須なので、フォームは送信されません。

私は次のことを試してみました:

<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> 

私の質問は何か...です:アドレスの下に追加Javascriptを次のようになりますので

validates_length_of :address, :in => 1..50, :message => "Required field, please enter your address.", :unless => :located_in_us == "1" 

しかし、それが動作するようには思えませんユーザーが「いいえ」ラジオボタン(米国に住んでいない)をクリックすると、アドレスフィールドはもはや必須フィールドではなくなるようにフォームを作成しますか?

答えて

0

私は、モデルの検証のためのあなたの: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."} 
       }); 
}); 
+0

、今はJavaScriptを次のようになります。「しない限り」 'code':{} – ews2001

+0

私が与えたコードは、サーバー側の検証のためだったews2001 @を。私はクライアント側のコードを使って答えを更新しました。お知らせ下さい。 – tsherif

+0

あなたのJavaScriptは意味がありますが、私の質問に表示されているの行は自動的にオブジェクトによって作成され、ページソースに追加されます。オブジェクトで作成されたjavascriptを操作する方法、または少なくともカスタムjsを使用して、デフォルトのスクリプトの作成をオフにする方法はありますか? – ews2001