0

私は Rails3 でデバイスを使用しています。ユーザーの属性を更新する際に 1 つの問題に直面しています。これは現在のユーザーであり、ユーザーを更新しようとすると、更新されません。@user.errors を見ると、パスワードを空白にすることはできないと表示されます。私はこれについてデバイスのドキュメントを読み、 upate_without_password(params[:user]) を使用しましたが、私のために働いていません。私がMongodbを使用していることを知るためだけに。また、stackoverflow に投稿されたのと同じ質問をしましたが、うまくいきませんでした。コードを共有しましょう:

ユーザーモデルでは:次のようなパスワードの検証があります:

validates :password,
    presence: true,
    confirmation: true,
    length: { minimum: 5, maximum: 16 }

ユーザーコントローラーで:

protect_from_forgery except: :update
  def update
    @user = User.find(params[:id])

    if @user.update_without_password(params[:user])          
      sign_in(current_user, :bypass=>true)
      respond_to do |format|
        format.json {render :json => current_user.to_json(:only =>  [ :status])}
      end
    else         
      respond_to do |format|
        format.json {render :json => @user.errors.to_json}
      end
    end
  end

これは私がリクエストで送信しているパラメータです

Parameters: {"user"=>{"status"=>"verified", "_id"=>"user1"}, "id"=>"user1"}

Railsコンソールでも試しました。update_attributes を実行すると false と表示されますが、ユーザー オブジェクトを調べると、更新されたことが表示されます。

1.9.3p286 :008 > user.update_attributes({"status"=>"verified"})
 => false 

私が欠けているものは何か提案はありますか?

4

1 に答える 1

2

これを指定したかどうかを User モデルで確認します。

validates :password,:presence=>true

上記の検証を、次のようにユーザーの作成時にのみ実行されるように変更します。

validates :password,:presence=>true,:on=>:create

これにより、更新中のパスワードの検証がスキップされます

于 2013-01-30T06:30:52.703 に答える