0

ユーザー モデル:

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 に戻り、ユーザーが再び無効になります...どうにかして別のデータベースにヒットしていますか? 振り回されてます…

4

1 に答える 1