2013-02-23 69 views
1

我有一個執行after_save的軌model.save返回true,但不保存到數據庫

一些行動,在這一功能,我有以下代碼

progression = Progression.find_by_id(newprogression) 
if progression.participation_id.nil? 
    progression.participation_id = participation.id 
    progression.save 
else 

我所看到的模型內的一個函數是進展沒有被更新。儘管下面

  • 如果之前保存它已被更新
  • 如果調試器我手動運行progression.save我得到真正的回到我檢查progression.participation_id。

有什麼想法?

+0

不應該。也許驗證失敗。但他們也應該手動保存失敗。所以不確定。 – Arindam 2013-02-23 17:07:19

回答

0

嘗試

progression = Progression.find_by_id(newprogression) 
if progression.participation_id.nil? 
    progression.update_attributes(
    :participation_id => participation.id 
) 
else 
+1

沒有,也沒有工作。感謝思想,雖然 – 2013-03-04 12:44:15

+0

update_attributes後,你不必使用'保存' – user2503775 2013-08-13 13:43:25

+0

感謝您的更正。更新了答案。 – kobaltz 2013-08-13 15:25:37

0

這可能是一個緩存的問題。從rails guide on AR Relations - Sec 3.1開始,您可能希望通過傳遞true來重新加載緩存。如果您通過參與進行檢查,則可能會遇到此問題,然後通過進展建立鏈接。

假設進展belongs_to的參與,

你可以嘗試:progression.participation =參與,然後progression.save

另外,嘗試:participation.progressions < <進展和participation.save?

+0

是啊,已經這樣做了,到目前爲止沒有運氣 – 2013-03-04 12:43:47

1

我還是很新的Rails,但每次我保存的東西,我必須使用爆炸的方法。您是否嘗試過progression.save!

+0

是的,試過了,沒有骰子 – 2013-08-14 16:20:04

+0

我能想到的最後一件事就是如果你使用關係(如果你使用的是關係,就使用'progression.participation = participation'與命名) – Goldentoa11 2013-08-14 17:32:33

0

saveafter_save在同一個事務中運行。也許這是一個問題。嘗試使用after_commit回調

+0

感謝您的迴應,行動實際上是針對不同的模式比after_save指的是,所以我不確定這適用?儘管如此,請嘗試一下 – 2013-08-14 16:19:36

0

好的,我有同樣的問題,我設法處理它。 問題在於關聯名稱。我有一個名爲User的模型和一個名爲Update的子模型,其中每個用戶都有一些新的更新。所以,在user.rb我有這條線:

has_one :update 

當我刪除這一行後,一切再次開始工作。看起來這是一個rails保留名稱,創建模型時不應使用它。也許你在這裏有一些類似的問題。很遺憾,Rails沒有指出這個問題。