8

私たちはメンバーのためにdeviseを使用しています。メンバーのスキーマにtos_agreementフィールド(boolean)を追加し、views/devise/registrations/new.html.hamlに追加しました。メンバーモデルでTOS合意のチェックボックスをDeviseと一緒に追加

次のように、我々は検証ルールを持っている:

validates_acceptance_of :tos_agreement, :allow_nil => false, 
    :accept => true 

それが正常に動作します - あなたがTOSに同意しない場合は、登録することはできません。

ただし、問題は設定の編集に伴い発生します。 /members/editに行くと、電子メールアドレスまたはパスワードを変更できるフォームが表示されます。この時点では変更できないはずなので、TOS合意の分野はありません。ただし、変更(パスワードの変更など)してフォームを送信すると、TOS同意書が偽ではないというエラーメッセージが返されます。

最初の登録後にTOS契約を変更しようとしないようにどのように指示できますか?

編集:だから私は根本的な問題は私たちが持っていたと思う:私たちのattr_accessibleのtos_agreementは非常に悪い考えであった。しかし、それを取り除くと、パラメータを受け入れるようにDeviseを変更し、大量に割り当てることはできないものの、何かをどうやって行うのでしょうか?

+0

あなたはまた、実際にこれらの種類のデータベース内のフィールドを作成する必要はありません。それが唯一のサインアップ時にチェックだように、バリデータにオプションを作成します変数は、あなただけのための仮想フィールドを作成します。 http://guides.rubyonrails.org/active_record_validations.html#acceptance –

答えて

15

あなたは渡すことができます:上=>:

validates_acceptance_of :tos_agreement, :allow_nil => false, :accept => true, :on => :create 
+1

これは正解とマークする必要があります。元のポスターの質問に答えるだけです。 OPが元々求めていたものと全く同じです。後で状況がOPのために変更された場合、それはあなたの正確な質問に答えた人に信用することを意味するものではありません。 – alybadawy

関連する問題