2010-11-07 78 views
2

對於一個名爲Email.rb的模型,我有一個名爲new_todos的方法。如何使Rails中的多個模型可以使用相同的方法?

這種方法需要用於Call.rb,Postalcard.rb等。

而不是剪切和粘貼這個確切的片段跨多個活動記錄模型,我怎麼能只寫一次它,並提供給適當的模型?

我懷疑它可以通過將一個模塊放在/ lib文件夾中,但我不完全確定....謝謝!

def new_todos 

    Contact.campaign_id_is(self.campaign_id).each do |contact| 

     todo = Todo.new 

     todo.contact_id = contact.id 
     todo.user_id = contact.user_id 
     todo.asset = self.class.name 
     todo.asset_id = self.id 
     todo.original_date = contact.date_entered + self.days.days 
     todo.current_date = todo.original_date 
     todo.save 

    end 

    end 

回答

6

正如您所說,您可以創建一個模塊並將其包含在您需要的地方。

#lib/todo_extension.rb 

module TodoExtension 

    def new_todos 
    ... 
    end 

end 

# call.rb, postalcard.rb... 
    include TodoExtension 
+1

如果模塊的唯一目的是提供一組相同的方法,以每包括類/模塊,那麼沒有理由「去元」('self.included'和'klass.class_eval' )。只需在模塊中定義方法並將模塊包含在需要該方法的類中即可。 – 2010-11-07 18:24:28

+0

哦,很酷,不知道。謝謝。 – mark 2010-11-07 18:39:03

+0

是從@Chris糾正的以上答案嗎? – Angela 2010-11-07 21:13:18

相關問題