我有两个模型
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
基本上,“部门”模型有一个称为“截止日期”的虚拟属性,它是日期类型。'deadline' 的实际值以字符串格式存储在另一个模型 'checklist' 中。
每次更新'deadline'时,我想检查'checklist'中是否有条目,并创建(如果还没有)或更新(如果已经有条目)。
我是这样想的
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
我不确定如何将值传递给回调。
请帮我做这个设计。处理这个问题的标准方法是什么?先感谢您!