2012-11-16 128 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