パスワードの編集プロセスを変更したい。パスワードの編集ページには、1 つのフィールド :foo があり、ユーザーが正しく入力したかどうかを確認したいと考えています。
PasswordsController を作成し、update メソッドをオーバーライドして、:foo がデータベースと同じかどうかをテストするコードを追加しました。
def update
self.resource = resource_class.reset_password_by_token(resource_params)
# this is code that I added
unless self.resource.foo == params[resource_name][:foo]
self.resource.errors.add(:foo, "Foo not correct")
end
if resource.errors.empty?
resource.unlock_access! if unlockable?(resource)
flash_message = resource.active_for_authentication? ? :updated : :updated_not_active
set_flash_message(:notice, flash_message) if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_resetting_password_path_for(resource)
else
binding.pry
respond_with resource
end
end
:foo フィールドに「test」と入力するとしますが、データベースではその値は「fake」です。ビューにエラーが表示されますが (「Foo が正しくありません」)、入力した値 (「test」) ではなく、データベースからの値 (「fake」) が :foo フィールドに入力されます。
reset_password_by_token を再定義するか、カスタム メソッドを使用する必要がありますが、この問題を解決するためのより洗練された方法があるのでしょうか?