ユーザー モデル:
class User < ActiveRecord::Base
before_save { self.email == email.downcase }
attr_accessor :name, :email
validates :name, presence: true
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false}
has_secure_password
validates :password, length: { minimum: 6 }
end
コンソールの内側:
:001 > User.all
User Load (3.1ms) SELECT "users".* FROM "users"
=> #<ActiveRecord::Relation []>
:002 > User.create(name: "Ryan Waits", email: "ryan.waits@gmail.com", password:
"foobar", password_confirmation: "foobar")
(0.1ms) begin transaction
User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") =
LOWER('ryan.waits@gmail.com') LIMIT 1
Binary data inserted for `string` type on column `password_digest`
SQL (6.8ms) INSERT INTO "users" ("created_at", "password_digest", "updated_at") VALUES
(?, ?, ?) [["created_at", Sat, 02 Nov 2013 16:20:10 UTC +00:00], ["password_digest",
"$2a$10$5MhI5u90tFqO3rrS58DW7eeNBdNCCveBA.IfqHp6OpwonYNaigyPO"], ["updated_at", Sat, 02
Nov 2013 16:20:10 UTC +00:00]]
(1.3ms) commit transaction
=> #<User id: 3, name: nil, email: nil, created_at: "2013-11-02 16:20:10", updated_at:
"2013-11-02 16:20:10", password_digest:
"$2a$10$5MhI5u90tFqO3rrS58DW7eeNBdNCCveBA.IfqHp6Opwo...">
(user = User.all) user.name は "User" を返し、電子メールとパスワードの属性はユーザー オブジェクトで未定義のメソッド エラーを返します。
*ノート:
名前、電子メール、属性が「ユーザー」ではなくnilを返し、未定義のメソッドエラーが返されることを除いて、同じ結果で異なる属性を持つ別のユーザーを作成しました。
*アップデート:
したがって、一意性の検証が次のメッセージでヒットしていることに気付きました。
SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") =
LOWER('ryan.waits@gmail.com') LIMIT
しかし、新しい属性で新しいユーザーをテストすると、create メソッドを使用すると nil 属性が返されます。ただし、(user.name = "adhsasd") のように属性を更新すると、ユーザーが作成されます。しかし、その後、User.all を照会すると、属性が nil に戻り、ユーザーが再び無効になります...どうにかして別のデータベースにヒットしていますか? 振り回されてます…