0

我有两个模型

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

我不确定如何将值传递给回调。

请帮我做这个设计。处理这个问题的标准方法是什么?先感谢您!

4

1 回答 1

0

update_checklist 是一个部门的方法。self.id因此,在 update_checklist 中,您可以访问任何部门属性,就像self.deadline您想要的一样。

于 2012-10-17T06:22:36.487 回答