2010-11-07 73 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

相关问题