6

私はそうしようとします。残念ながら、更新のオーバーライドに問題があり、それを正しく行う方法がわかりません。私が別の場所でそれを行う方法は次のとおりです。

if params[:user][:password].blank?
  params[:user].delete("password")
  params[:user].delete("password_confirmation")
end
# ...
user.save!

だから私はオーバーライドしようとしましたupdate

def update
  if params[:user][:password].blank?
    params[:user].delete("password")
    params[:user].delete("password_confirmation")
  end
  super
end

しかし、うまくいきません。私はまだcan't be blankパスワード入力に近づいています。期待される動作を実現する方法は?

4

3 に答える 3

17

@anonymousxxx の回答を取得し、以下を追加します。

rails admin を使用している場合は、次のようにコントローラーの "User" をオーバーライドできます。

#app/admin/user.rb
controller do
  def update
    if params[:user][:password].blank? && params[:user][:password_confirmation].blank?
      params[:user].delete("password")
      params[:user].delete("password_confirmation")
    end
    super
  end
end

また、ユーザー モデルの検証がある場合は、そのような検証がいつ適用されるかを指定することにも注意してください。たとえば、次のようになります。

validates :name, :email, presence: true
validates :password, :password_confirmation, presence: true, on: :create
validates :password, confirmation: true

これにより、新しいユーザーを作成し、パスワードを変更せずに更新する場合にのみ、パスワードの存在を検証できます。

これがお役に立てば幸いです。

于 2014-03-05T15:19:14.090 に答える