rails将参数传递给回调

时间:2012-10-17 05:48:32

标签: ruby-on-rails callback model-associations

我有两个型号

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

我不知道如何将值传递给回调。

请帮我这个设计。处理这个问题的标准方法是什么?提前谢谢!

1 个答案:

答案 0 :(得分:0)

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