質問は非常に単純です。いくつかの属性を更新したくない場合でも、 update_attributes はモデルの可能なすべての検証を検証しますか?
ユーザーが自分のパスワードを変更できる編集ビューがありますが、それを渡した場合に限ります。つまり、空白の場合、パスワードは変更されません。
したがって、コントローラーで次のことを行います。
def update
params[resource_name].delete(:password) if params[resource_name][:password].blank?
params[resource_name].delete(:password_confirmation) if params[resource_name][:password_confirmation].blank?
params[resource_name].delete(:current_password) if params[resource_name][:current_password].blank?
if resource.update_attributes(params[resource_name])
...
end
end
モデルに次の検証を定義しました。
validates :password,
:length => { :within => 6..40 }
そのため、call the update を使用するたびに、パスワードが短すぎるというエラーが表示されます
Ps .: 私はこれを処理するために Devise を使用しています。
編集: Devise がすでにパスワードの検証を行っているかどうか知っている人はいますか? 原因は、検証を削除したところ、正しい方法で機能しましたが、短いパスワードを入力しても、短すぎるという検証が表示されます。