Michael Hartl によるhttp://ruby.railstutorial.org/のチュートリアルを進めています。
私は第6章、具体的には次のようなコードリスト6.27にいます:
require 'spec_helper'
describe User do
before do
@user = User.new(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar")
end
subject { @user }
it { should respond_to(:name) }
it { should respond_to(:email) }
it { should respond_to(:password_digest) }
it { should respond_to(:password) }
it { should respond_to(:password_confirmation) }
it { should be_valid }
end
User オブジェクトは次のようになります。
class User < ActiveRecord::Base
attr_accessible :email, :name, :password, :password_confirmation
before_save { |user| user.email = email.downcase }
validates :name, presence: true, length: {maximum: 50}
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniquenes
{case_sensitive: false}
end
User オブジェクトには、id、name、email、created_at、updated_at、password_digest の 6 つの属性があります。password_digest は、ハッシュされたパスワードが保存される場所です。しかし、ご覧のとおり、フィールド password と password_confirmation はデータベースにありません。password_digest のみです。著者は、それらをデータベースに保存する必要はなく、一時的にメモリに作成するだけであると主張しています。しかし、rspec テストからコードを実行すると:
@user = User.new(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar")
フィールド password と password_confirmation が定義されていないというエラーが表示されます。どうすればこれを回避できますか?
マイク