2012-02-28 42 views
0

passwordフィールドがデータベースに保存されていませんが、何らかの理由で正しく更新されていないRuby on RailsアプリケーションのUserモデルを作成しようとしています。データベースによって更新されない属性は更新されません

class User < ActiveRecord::Base 
    attr :password 
    validates_presence_of :email, :password_digest 

    def password! 
    password_digest = Digest::SHA1.hexdigest(password) 
    end 

    def password?(password) 
    password_digest == Digest::SHA1.hexdigest(password) 
    end 
end 

私はemailpasswordを更新するために、非常に基本的なフォームを使用しています。私のコントローラで

= form_for @user do |f| 
    -if @user.errors.any? 
    #error_explanation 
     %h2= "#{pluralize(@user.errors.count, "error")} prohibited this user from being saved:" 
     %ul 
     - @user.errors.full_messages.each do |msg| 
      %li= msg 

    .field 
    = f.label :email 
    = f.email_field :email, :required => true 
    .field 
    = f.label :password 
    = f.password_field :password, :required => true 
    .actions 
    = f.submit 'Save' 

私は絶対にしなければならない場合、より多くのコードを追加して喜んでいるが、私は、基本的な更新メカニズムを使用しようとしています。この更新は、それがメッセージをTypeErrorをスロー処理さ

class UsersController < ApplicationController 
    def create 
    @user = User.new(params[:user]) 

    @user.password! 

    respond_to do |format| 
     if @user.save 
     format.html { redirect_to @user, notice: 'User was successfully created.' } 
     format.json { render json: @user, status: :created, location: @user } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
end 

can't convert nil into String

params[:user][:password]を使用して手動でpasswordを設定するなど、いくつかの方法でこれを修正しようとしましたが、動作しません。誰も私が行方不明のバグを見つけることができますか?

+0

attr_accessibleを試しましたか? –

+0

'attr_accessible'とは何ですか? 'attr'のドロップイン? –

答えて

2

パスワードを忘れた場合メソッドでは、インスタンス変数password_digestにアクセスするように指定する必要があります。変更:

def password! 
    self.password_digest = Digest::SHA1.hexdigest(password) 
end 
関連する問題