0

データベースに保存されていないフィールドを持つアプリのUserモデルを作成しようとしていますが、何らかの理由で正しく更新されません。Ruby on Railspassword

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

emailとを更新するために非常に基本的なフォームを使用していpasswordます。

= 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'

私のコントローラーでは、基本的な更新メカニズムを使用しようとしていますが、絶対に必要な場合はコードを追加してもかまいません。

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

この更新が処理されるTypeErrorと、メッセージとともに がスローされます: can't convert nil into String

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

4

1 に答える 1

2

あなたのパスワードに!メソッドでは、インスタンス変数 password_digest にアクセスすることを指定する必要があります。への変更:

def password!
  self.password_digest = Digest::SHA1.hexdigest(password)
end
于 2012-02-28T16:58:11.723 に答える