今私はこのトピックが以前何度もカバーされていることを認識しています。しかし、データベース内のパスワードが空白の場合にのみ現在のパスワードフィールドを除外するソリューションがあるようには見えませんでした。Ruby on Rails、Devise gem。パスワードが空白のときに現在のパスワードを削除する方法は?
私は、現在のように私のユーザモデルに必要なパスワードがあります。
def password_required?
(authentications.empty? || !password.blank?) && super
end
をそれから私は私の登録コントローラに渡って更新機能をコピー:
def update
if resource.update_with_password(params[resource_name])
set_flash_message :notice, :updated
sign_in resource_name, resource, :bypass => true
redirect_to after_update_path_for(resource)
else
clean_up_passwords(resource)
render_with_scope :edit
end
end
私はどのようにするのか分かりません空白のパスワードを編集するときにパスワードを必要としないようにするには、ビューからcurrent_passwordフィールドを削除して、これを行う必要がありますか?
<% if current_user.password_required? %>
<p><%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
<%= f.password_field :current_password %></p>
<% end %>
<p><%= f.submit "Update" %></p>
私は何かを見落としていると確信しているので、どんな提案も素晴らしいですが、私はまだレール全体に新しいです。ありがとう!
'current_user.has_no_passwordが' 'true'をを返します。そうでなければ、私は、現在のパスワードのparamをクリアして、(この方法は、今にも工夫することで構築されています)update_without_passwordを呼び出します? if文はそのブロックを実行します。あなたは、その文を検証するために否定的な言葉を使っています...あなたが 'current_user.has_no_password? 'を書いてはいけないのですが、まだ面白いと読んでください。 'current_user.has_password?'を実行し、 'self.encrypted_password.present?'を返すように定義すると読みやすくなります(これについては後述しますが、これはコメントに含まれています。 、もっと読みやすい解決策) – wulftone
私はこれを他の何かの基礎として使っていました。変更のみ:現在のパスワードが '' ''に設定されていたので、大量割り当てエラーを避けるために 'if!params [:current_password] .blank? 'を削除しなければならなかった(したがって' 'blank?== true')しかし、 'update_attributes(params)'は ':current_password => '''でユーザレコードを更新しようとしました。 'current_password'はユーザの属性ではないので、明らかに失敗します。私はスティックの間違った終わりを持っている?また、 '自己'は冗長ではない? – dgmstuart
私はこの解決策を試しました。保護属性を大量に割り当てることはできません:current_password – simo