2015-10-30 45 views
0

當我嘗試如何查看rails console活動記錄錯誤?

2.1.5 :013 > User.create(id: 999999, first_name: 'bob', login: 'smithb', 
last_name: 'smith', email: '[email protected]', active: true) 
(0.1ms) BEGIN 

我得到

(0.1ms) ROLLBACK 
=> #<User id: nil, login: "smithb", password_digest: nil, created_at: nil, updated_at: nil, first_name: "bob", last_name: "smith", email: "[email protected]", roles: nil, active: true> 
2.1.5 :014 > User 
=> User(id: integer, login: string, password_digest: string, created_at: datetime, updated_at: datetime, first_name: string, last_name: string, email: string, roles: integer, active: boolean) 

我怎麼能看到什麼樣的錯誤引起的回滾?

我可以看到在模型的驗證,我相信我擁有所有必需的字段,以便試圖找出錯誤是什麼

用戶模型是

2.1.5 :015 > User 
=> User(id: integer, login: string, password_digest: string, created_at: datetime, 
updated_at: datetime, first_name: string, last_name: string, email: string, 
roles: integer, active: boolean) 

更新 - 這是文摘我需要的。我仍然很想知道如何看到這個錯誤。

回答

2

你可以試試這個方法:

@user = User.create(id: 999999, first_name: 'bob', login: 'smithb', 
last_name: 'smith', email: '[email protected]', active: true) 

檢查錯誤和有效性:

@user.errors 
@user.errors.messages 
@user.valid? 
+0

該解決方案是控制器,他的問題不是問題所在。 – miler350

+1

我完全同意。該解決方案可在控制器和控制檯中使用。這個解決方案在控制檯上工作沒有任何問題。學到更多。 – Rubyrider

+0

你是什麼意思?誰告訴你沒有實例變量? – Rubyrider

0

只需添加!創建。

User.create!(id: 999999, first_name: 'bob', login: 'smithb', last_name: 'smith', email: '[email protected]', active: true) 
+0

這不是好的方法,這將通過例外這是沒有必要的。 – Rubyrider

+0

除非你對任何事情都很滿意,否則不要混淆。這個解決方案在兩側都能正常工作! – Rubyrider

0

如果你想避免省錢,而不是ActiveRecord自動回滾時驗證失敗,則必須在對象上做new

2.1.5 :013 > user = User.new(id: 999999, first_name: 'bob', login: 'smithb', last_name: 'smith', email: '[email protected]', active: true) 
2.1.5 :014 > user.valid? 
2.1.5 :015 > true/false 
2.1.5 :016 > user.save 

上線015如果false然後

2.1.5 :016 > user.errors #will show if any errors 

TIP

create將火節省I,E後new然後savesave!將直接拋出ActiveRecord錯誤,如果任何

因此,更好的方式是

> user = 2.1.5 :013 > User.new(id: 999999, first_name: 'bob', login: 'smithb', last_name: 'smith', email: '[email protected]', active: true) 
> if user.valid? 
> user.save 
> else 
> "throw some error" 
> end