我有两个型号
class Department < ActiveRecord::Base
has_many :checklists
attr_accessible :deadline
after_update :update_checklist
class Checklist < ActiveRecord::Base
belongs_to :department
attr_accessible :content, :category
基本上,'department'模型有一个名为'deadline'的虚拟属性,它是日期类型。 “截止日期”的实际值存储在另一个模型“清单”中,格式为字符串。
每当“截止日期”更新时,我想检查“清单”中是否有条目,并创建(如果尚未)或更新(如果已有条目)。
我这样想着
def deadline=(deadline)
@cl = Checklist.find_or_create_by_department_id_and_category(self.id, 'deadline')
@cl.update_attributes(:content => deadline.to_s)
@cl.save
end
def deadline
@deadline = self.checklists.find_by_category('deadline')
Date.parse(@deadline.to_s)
end
但是上面的虚拟属性不起作用。 在搜索答案时,我在rails cast上发现回调对于这种情况来说是更好的解决方案。所以我想尝试类似的东西:
class Department < ActiveRecord::Base
after_update :update_checklist
def update_checklist
@cl = Checklist.find_or_create_by_department_id_and_category(self.id, 'deadline')
@cl.update_attributes(:content => ???)
end
我不知道如何将值传递给回调。
请帮我这个设计。处理这个问题的标准方法是什么?提前谢谢!
答案 0 :(得分:0)
update_checklist是Department的一种方法。因此,在update_checklist中,您可以访问任何部门属性,就像self.id
一样,self.deadline
就是您想要的。