0

私のモデルには、次のものがあります。

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>

私の質問は...ユーザーが[いいえ]ラジオボタンをクリックしたときに(米国に住んでいない)、住所フィールドが必須フィールドではなくなるようにフォームを作成するにはどうすればよいですか?

4

1 に答える 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."}
                 });
});
于 2012-04-19T21:23:20.207 に答える