簡単に言うと、localhost のデータベースを一掃し、Rails アプリで posgreSQL と pgAdmin を試してみることにしました。最初に、pgAdmin を介して所有していたサーバーをすべて削除しました。次に、、、そして最後に を実行しdb:create:all
ましdb:migrate
たdb:test:prepare
。このデータベースの実験をすべて行う前に、以前の仕様テストを実行するたびに、テストの大部分が失敗し、このエラーが発生します..
Failure/Error: @user = FactoryGirl.create(:user)
NoMethodError:
undefined method `password_reset_sent_at' for #<User:0xb48a55c>
また
Failure/Error: @user.save
NoMethodError:
undefined method `password_reset_sent_at' for #<User:0xaa9c040>
password_reset_sent_at
アクセスできない属性として許可していない可能性があると思いましたが、アクセス可能であり、ユーザー モデルにはhas_one :user_reset_password, :dependent => :destroy
.
私のdatabase.ymlは次のようになります...
development:
adapter: postgresql
encoding: unicode
database: template_development
host: localhost
pool: 5
username: jason
password: password
test:
adapter: postgresql
encoding: unicode
database: template_test
host: localhost
pool: 5
username: jason
password: password
アプリケーションを実行して新しいユーザーを作成すると、このエラーが発生します。
undefined method `password_reset_sent_at' for #<User:0xa6fb184>
app/models/user.rb:78:in `empty_password_reset_token'
app/controllers/users_controller.rb:25:in `create'
そのempty_password_reset_token
方法は
def empty_password_reset_token
if self.password_digest_changed?
if self.password_reset_sent_at && self.password_reset_sent_at < 2.hours.ago
false
else
self.password_reset_token = ""
self.password_reset_sent_at = ""
end
end
end
私のスキーマファイル
ActiveRecord::Schema.define(:version => 20130124193639) do
create_table "user_login_failures", :force => true do |t|
t.integer "user_id"
t.integer "login_failure_attempts"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "user_reset_passwords", :force => true do |t|
t.integer "user_id"
t.string "password_reset_token"
t.datetime "password_reset_sent_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "users", :force => true do |t|
t.string "name"
t.string "email"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "password_digest"
end
add_index "users", ["email"], :name => "index_users_on_email", :unique => true
end
なぜこれが機能しないのか、私には本当にわかりません。すべてのテーブルには適切な列があり、欠落しているものはありません。どんな助けでも大歓迎です。