2

2つのチェックボックスがあるフォームで作業しています:option_oneoption_two

option_twoチェックされているのにチェックされていない場合、フォームの送信を許可したくoption_oneありません。

言い換えれば、誰かがチェックする場合option_two、彼らもチェックする必要がありoption_oneます。

だから私のMyModelで私は書いた:

validates :option_one, :presence => true, :if => option_two_active?, :message => "Dummy message."

次に、MyControllerに次を追加しました:

def option_two_active?
    params[:option_two] == "1"
end 

しかし、それは私に次のエラーを与え続けます:

NoMethodError in MyController#index

私のアプローチは正しいですか?どうすればこれを達成できますか?前もって感謝します。

4

2 に答える 2

2

メソッドを参照する方法では、クラスが最初にロードされるときに直接呼び出されます。ただし、:ifパラメーターは、検証中に呼び出される proc またはメソッド名を表すシンボルのいずれかで使用されることが期待されます。あなたの場合、次のように検証を設定する必要があります。

validates :option_one, :presence => true, :if => :option_two?, :message => "Dummy message."

メソッド名の前のコロンに注意してください。さらに、検証メソッドはコントローラーではなくモデルで定義する必要があります。幸いなことに、ここで使用されているように、ActiveRecord は既にブール フィールドの適切なメソッドを定義しています。

于 2012-08-15T14:21:12.333 に答える
2

シンボルを使用して条件付きメソッドを指定する必要があります。

validates :option_one, :presence => true, :if => :option_two_active?, :message => "Dummy message."

また、モデルから使用できないため、 、、または手動でparams、コントローラーからモデルにその値を割り当てる必要があります。フィールドを永続化する場合は、データベース列にする必要があります。それ以外の場合は、属性アクセサーを作成できます。createupdate_attributesoption_two

attribute_accessor :option_two
于 2012-08-15T14:21:18.813 に答える