0

私は、ユーザーにパスワードをリセットするための電子メールを送るために新しいトークンを割り当てるreset_tokenメソッドを持つメンバモデルを持っています。しかし、update_attributeはデータベースに何も保存しません。私は持っています:attr_accessibleとattr_accessorにnew_password_tokenを割り当てました。ログには、塩とトークンを拾うが、それは常に、それが呼び出されるRails 3 update_attributeが起動しない

def self.reset_token(email) 
    member = find_by_email(email) 
    if member 
    #Reset token, and then send email 
    salt = BCrypt::Engine.generate_salt 
    logger.error "Salt is #{salt}" 
    token = BCrypt::Engine.hash_secret(email, salt) 
    logger.error "token is #{token}" 
    if member.update_attribute(:new_password_token, token) 
     member 
    end 
    end 
    nil 
end 

コントローラメソッドnilを返します。

def reset_password 
    @member = Member.reset_token(params[:email]) 
    if @member 
    redirect_to(root_url, :notice => "Please check your email for instructions") 
    else 
    redirect_to(root_url, :notice => "Sorry we have no record of your account") 
    end 
end 
+0

'nil'が最後のステートメントであるため、' nil'を返します。 'return member'を呼び出すか、メソッドから' nil'を取り除きます。 'update_attribute'については、検証ではないと確信していますか? –

+0

'else member'のように' else member'文を 'if member.update ....'の行の後に追加することができます。 –

+0

さて、それ以上は何も返されない(私はそれがメンバーに戻ってくると思っていたと思います...あなたは正しいナッシュでした)。今問題は、データベースに保存しないことです。私はそれをupdate_attributesに変更しようとしましたが、ドット表記で変数を設定してからmember.saveを呼び出そうとしましたが、まだ何らかの理由で保存していません。 – Msencenb

答えて

2

は、モデルからattr_accessorを削除してください。 attr_accessorは、new_password_tokenのリーダーおよびライターのメソッドを作成しています。あなたupdate_attributeそれはちょうどあなたのオブジェクトのインスタンス変数を設定し、完全にデータベースをバイパスされたときに

def new_password_token=(new_password_token) 
    @new_password_token = new_password_token 
end 

:ライターメソッドは同等です。

+0

ありがとうございます:) – Msencenb

関連する問題