2009-12-02 124 views
0

我试图创建一个日志已每次更新中更改为某个消息的属性。属性为IssueStatusIssueType,并且都与UpdateAction有两个多态关联,这就完美地节省了changed_from_idchanged_from_type以及changed_to_idchanged_to_typeHas_many/belongs_to关联由于多态关联而不能保存?

class IssueStatus < ActiveRecord::Base 
    has_many :update_actions, :as => :changed_to 
    has_many :update_actions, :as => :changed_from 
end 

class IssueType < ActiveRecord::Base 
    has_many :update_actions, :as => :changed_to 
    has_many :update_actions, :as => :changed_from 
end 

class Update < ActiveRecord::Base 
    has_many :update_actions 
end 

class UpdateAction < ActiveRecord::Base 
    belongs_to :changed_to, :polymorphic => true 
    belongs_to :changed_from, :polymorphic => true 

    belongs_to :update 
end 

的问题是,试图保存UpdateActionUpdate.update_actions不起作用。对于savesave!,Rails返回true,但是我的development.log显示没有执行SQL查询。我找不到我做错了什么,因为没有记录(或者我不知道如何找到它)。从控制台工作:

>> action = UpdateAction.new 
=> #<UpdateAction id: nil, changed_from_id: nil, changed_from_type: nil, changed_to_id: nil, changed_to_type: nil, update_id: nil, created_at: nil, updated_at: nil> 
>> action.changed_from = from 
=> #<IssueStatus id: 2, name: "Open", created_at: "2009-12-02 05:34:41", updated_at: "2009-12-02 05:34:41"> 
>> action.changed_to = to 
=> #<IssueStatus id: 1, name: "Closed", created_at: "2009-12-02 05:34:30", updated_at: "2009-12-02 05:34:30"> 
>> action.save 
=> true 
>> update = Update.last 
=> #<Update id: 1, description: "Yawn", created_at: "2009-12-02 05:19:25", updated_at: "2009-12-02 05:19:25"> 
>> u.update_actions << action 
=> [#<UpdateAction id: 2, changed_from_id: 2, changed_from_type: "IssueStatus", changed_to_id: 1, changed_to_type: "IssueStatus", update_id: 1, created_at: "2009-12-02 05:35:16", updated_at: "2009-12-02 05:35:16">] 
>> u.save 
=> true 
>> u.update_actions 
=> [#<UpdateAction id: 2, changed_from_id: 2, changed_from_type: "IssueStatus", changed_to_id: 1, changed_to_type: "IssueStatus", update_id: 1, created_at: "2009-12-02 05:35:16", updated_at: "2009-12-02 05:35:16">] 
>> u.reload 
=> #<Update id: 1, description: "Yawn", created_at: "2009-12-02 05:19:25", updated_at: "2009-12-02 05:19:25"> 
>> u.update_actions 
=> [] 

任何帮助,将不胜感激,我想我做错了,但我一直在寻找它太长弄清楚什么。提前致谢!

+0

u.update_actions << action'是update.update_actions << action'的拼写错误吗? – Swanand 2009-12-02 07:55:54

+0

是的,这次我混淆了它们,但它并没有改变这个问题。 – Janteh 2009-12-02 09:25:26

回答

3

action = UpdateAction.new 

action = Update.last.update_actions.build 

这里的什么发生在你的榜样更改您的第一行(假设你引用一个真正的U,不更新为Swanand建议) - 在u.save行不做任何事情,因为它只保存未保存的关联对象。你已经保存了一个堕落的动作,因此相关的对象上保存的has_many不认为有什么工作要做,因为这需要改变字段是关联的对象。所以,没有保存update_id字段的地方。你也可以调用action.save并修复它。

我会validate_presence_of UPDATE_ID防止保存在数据库上update_actions添加FK约束的UPDATE_ID。

+1

感谢您为我解决这个问题。现在有道理。不胜感激! – Janteh 2009-12-03 06:51:33