2013-11-02 18 views
0

用戶模型:創建軌道控制檯的內部的用戶未填充必要屬性

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時,屬性返回到零,並且用戶再次無效...我是否以某種方式打到不同的數據庫?我越來越轉身......

+0

檢查這個答案關於使用attr_accessor:http://stackoverflow.com/questions/4700785/using-attr-accessor-and-attr-accessible-on-the- same-field –

+0

爲什麼你在before_save過濾器中使用==不應該是單個=分配新值嗎 –

回答

2

基本上,我想你想attr_accessible,而不是在你的模型attr_accessor ...

this answer

「attr_accessor是Ruby代碼,當你做的是使用在你的數據庫中沒有列,但仍希望在你的表單中顯示一個字段,唯一允許的方法是attr_accessor:fieldname,如果你願意,你可以在你的視圖或模型中使用這個字段,但主要是你的視圖

attr_accessible允許你列出你想允許的所有列Mass Assignmen噸,因爲安迪在上面躲過了。與此相反的是attr_protected,這意味着我不希望任何人被允許進行Mass Assign。更有可能的是,它將成爲數據庫中的一個領域,您不希望任何人在附近玩耍。就像一個狀態字段,或類似的。「

+0

謝謝!這有助於控制檯錯誤,但是當我遍歷User.all中的索引控制器,我仍然得到未定義的方法與名稱和電子郵件屬性,但如果我將索引控制器設置爲User.find(#id)'的用戶,屬性顯示罰款... User.all給我的問題在控制器中 –

+0

你重新啓動了你的服務器嗎? –