2012-10-17 80 views
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 

基本上,「部門」的模式有一個名爲「最後期限」虛擬屬性,它是類型日期。 「截止日期」的實際值以字符串格式存儲在另一個模型「清單」中。

每次當「最後期限」被更新,我想檢查是否有在「清單」的條目,並創建(如果還沒有)或更新(如果已經有一個條目)。

我是這樣想的

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 

但上面的虛擬屬性不能正常工作。 在尋找答案時,我在軌道上發現,對於這種情況,回調將是更好的解決方案。所以,我想是這樣的:

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

update_checklist是部門的方法。所以update_checklist內,您可以訪問任何部門的屬性,就像self.idself.deadline是你想要的。

+0

但內容並不存儲在部門的任何屬性。它是來自控制器的值(表單值)。 – user1495133

+0

但使用的是「大限」,如下內容:@ cl.update_attributes(:含量=> deadline.to_s) – Yanhao