2012-11-16 115 views
1

軌3.2.8軌道模型保存沒有被提交,但沒有錯誤

我試圖創建一個簡單的多態Log模型作爲logable。該表只有一個字段,日誌,它被設想爲只是一個時間戳,而短消息將被附加到has_one關係。

我的問題是創建記錄後,我似乎無法得到追加並保存信息。調試顯示它已被提交併且記錄已更改,但重新加載時會恢復爲原始版本。我一直在尋找這種方式,現在是時候看看有沒有人看到一些愚蠢的東西。

模型的相關部分:

class Log < ActiveRecord::Base 
    belongs_to :logable, :polymorphic => true 
    attr_accessible :logable_id, :log, :logable_type 

    def set_log(entry) 
    self.log << "\r\n#{Time.now.to_s} - #{entry}" 
    self.save  
    end 
end 

class Candidate < ActiveRecord::Base 
    attr_accessible :citizen_id, :commitment_id, :current_stage, :current_status 
    has_one :log, :as => :logable 

    def append_log(entry) 
    if self.log.nil? 
     self.build_log(:log => "#{Time.now.to_s} - Log Created") 
     self.log.save 
    end 
    self.log.set_log(entry) 
    end 
end 

下面是從控制檯日誌,我得到一個候選人,看看日誌(只有原來創建的條目),添加一個條目,顯示出在所作的更改實例。重新加載日誌記錄並且更改消失。

1.9.2-p136 :001 > c = Candidate.find(1) 
    Candidate Load (15.1ms) SELECT "candidates".* FROM "candidates" WHERE "candidates"."id" = ? LIMIT 1 [["id", 1]] 

1.9.2-p136 :002 > c.log 
    Log Load (0.1ms) SELECT "logs".* FROM "logs" WHERE "logs"."logable_id" = 1 AND "logs"."logable_type" = 'Candidate' LIMIT 1 
=> #<Log id: 1, logable_id: 1, logable_type: "Candidate", log: "2012-11-16 15:23:49 -0600 - Log Created", created_at: "2012-11-16 21:23:49", updated_at: "2012-11-16 21:23:49"> 

1.9.2-p136 :003 > c.append_log("Add entry") 
LOG BEFORE 2012-11-16 15:23:49 -0600 - Log Created 
    (0.1ms) begin transaction 
    (0.1ms) commit transaction 
LOG APPENDED 2012-11-16 15:23:49 -0600 - Log Created 
2012-11-16 16:05:53 -0600 - Add entry 
NOTE Log field has been appended 
=> nil 

1.9.2-p136 :004 > c.log 
=> #<Log id: 1, logable_id: 1, logable_type: "Candidate", log: "2012-11-16 15:23:49 -0600 - Log Created\r\n2012-11-16...", created_at: "2012-11-16 21:23:49", updated_at: "2012-11-16 21:23:49"> 

NOTE Now reload the log record 
1.9.2-p136 :005 > l = Log.find(1) 
    Log Load (0.3ms) SELECT "logs".* FROM "logs" WHERE "logs"."id" = ? LIMIT 1 [["id", 1]] 
=> #<Log id: 1, logable_id: 1, logable_type: "Candidate", log: "2012-11-16 15:23:49 -0600 - Log Created", created_at: "2012-11-16 21:23:49", updated_at: "2012-11-16 21:23:49"> 
NOTE The add entry line is gone! 

我不知道這是否與HAS_ONE關係的問題,但即使我只是叫set_log只用日誌記錄,在出現追加,但重裝沒有變化。

難倒史蒂夫

回答

1

你展示所有鋼軌日誌?你叫c.append_log後,我希望看到一個UPDATE SQL日誌條目,但沒有一個。這表明,在self.saveset_log失敗。在c.log吐出.errors,看看是否驗證失敗...

原來這是因爲<<不玩弄骯髒的屬性位。

更改<<+=應該做的伎倆。

self.log += "\r\n#{Time.now.to_s} - #{entry}"

+0

我有錯誤陷阱,試圖保存!和一堆其他的東西。沒有錯誤(也沒有驗證)你的對,更新SQL不存在,只是開始事務和提交。幾乎看起來這個領域並沒有變得骯髒。 – appleII717

+0

忘記創建新記錄時,插入sql就在那裏。再次,我試圖保存候選模型和其他的東西,並且似乎我發現了一個沒有意義的錯誤,或者我有一個sqllite腐敗 – appleII717

+1

就是這樣......'<<'不會混淆髒位。更改爲使用'+ =' –

2

嘗試

self.save! 

如果有應該引發錯誤(或多個)任何

您還可以提高自己的異常或做魔像

if !self.save 
    raise "attempt to save failed" 
end 
+0

我試過保存!並有錯誤陷阱,但沒有錯誤。 self.errors不顯示消息。 – appleII717

+0

我試着執行@ object.save!但得到了下面的異常ActiveRecord :: RecordNotSaved異常:ActiveRecord :: RecordNotSaved。 @ object.errors不顯示任何東西,我仍然堅持這種情況 – furiabhavesh

+0

舊帖子,但在這裏相同...你如何添加這些錯誤,爲了讓它們在'@ object.errors'中可見? – Ben