11

メンバーにはdeviseを使用しています。tos_agreementフィールド(ブール値)をメンバースキーマに追加し、それをに追加しましたviews/devise/registrations/new.html.haml

メンバーモデルには、次のような検証ルールがあります。

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

正常に動作します。TOSを受け入れないと、登録できません。

ただし、問題は設定の編集にあります。あなたが行くと/members/editあなたはあなたの電子メールアドレスまたはパスワードを変更することができるフォームを手に入れます。この時点では変更できないはずなので、TOS契約のフィールドはありません。ただし、変更(パスワードの変更など)を行ってフォームを送信すると、TOS契約が偽であってはならないというエラーメッセージが返されます。

最初の登録後にTOS契約を変更しようとしないようにするにはどうすればよいですか?

編集:基本的な問題は、attr_accessibleに:tos_agreementが含まれていることだと思います。これは、今では非常に悪い考えでした。しかし、それを削除した場合、一括割り当て可能ではない場合でも、パラメーターを受け入れてそれを使用して何かを行うようにDeviseを変更するにはどうすればよいでしょうか。

4

1 に答える 1

23

:on => :create オプションをバリデーターに渡して、サインアップ時にのみチェックされるようにすることができます。

validates_acceptance_of :tos_agreement, :allow_nil => false, :accept => true, :on => :create
于 2013-02-06T04:57:19.640 に答える