用戶模型:創建軌道控制檯的內部的用戶未填充必要屬性
class User < ActiveRecord::Base
before_save { self.email == email.downcase }
attr_accessor :name, :email
validates :name, presence: true
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][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: "[email protected]", password:
"foobar", password_confirmation: "foobar")
(0.1ms) begin transaction
User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") =
LOWER('[email protected]') 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.all) user.name帶回「用戶」和電子郵件和密碼屬性帶回用戶對象未定義的方法錯誤。
*注:
我創建了不同的屬性,相同的結果,除了姓名,電子郵件其他用戶,屬性返回nil,而不是「用戶」和未定義的方法錯誤。
*更新:
所以我現在認識到,唯一性驗證正在熱播此消息:
SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") =
LOWER('[email protected]') LIMIT
但是當我測試使用新屬性的新用戶,它仍然返回nil屬性時使用create方法。但是,更新像這樣的屬性(user.name =「adhsasd」)將創建一個用戶。但後來當我查詢User.all時,屬性返回到零,並且用戶再次無效...我是否以某種方式打到不同的數據庫?我越來越轉身......
檢查這個答案關於使用attr_accessor:http://stackoverflow.com/questions/4700785/using-attr-accessor-and-attr-accessible-on-the- same-field –
爲什麼你在before_save過濾器中使用==不應該是單個=分配新值嗎 –