2013-06-18 45 views
3

我無法在數據庫中創建一行。 Rails顯然開始,然後立即回滾交易,沒有任何錯誤。我正在使用sqlite3。自動回滾沒有任何錯誤?

logger.debug("creating billing name...") 
    BillingName.create() #also tried BillingName.new.save 
    logger.debug("...created") 

日誌文件:

creating billing name... 
^[[1m^[[36m (0.1ms)^[[0m ^[[1mbegin transaction^[[0m 
^[[1m^[[35m (0.1ms)^[[0m rollback transaction 
...created 

select * from billing_name顯示確實沒有條目已被添加。我怎麼知道交易被拒絕的原因?

+1

也許BillingName失敗驗證?嘗試將您的create語句更改爲'BillingName.create!',並查看Rails在日誌中引發的異常。 – ipd

+2

「我怎麼知道交易被拒絕的原因?」這樣做:'BillingName.new(name:'blabla')'etc,並用'.valid?'測試它(也可以參考'.persisted?'來測試這個條目在數據庫中是否是savd) – MrYoshiji

+0

嘗試'billing_name = BillingName.new; billing_name.save; console.log(billing_name.errors.inspect.to_s)'來查看錯誤是什麼。 – spullen

回答

7

您可以將savevalid?

billing_name = BillingName.new 
billing_name.save # or billing_name.valid? 
puts billing_name.errors.inspect 
+1

此外,'billing_name.errors.full_messages'將以更好的格式爲您提供錯誤數組。 – spullen

3

後檢查錯誤,這些都是很好的答案,可以幫助您通過檢查模型找出錯誤。我也使用這些。

但我發現ActiveRecord並不總是提供有用的信息,特別是在回調中。 valid?將爲true,錯誤將爲空,並且除回滾外,控制檯不顯示任何內容。因此,看看這些回調中發生了什麼,特別是before_create過濾器。

+0

拯救生命......我怎麼可能是這樣一個白癡,想念那個?謝謝 –

相關問題