Ruby on rails 如何使相同的方法可用于Rails中的多个模型?

Ruby on rails 如何使相同的方法可用于Rails中的多个模型?,ruby-on-rails,methods,Ruby On Rails,Methods,对于一个名为Email.rb的模型,我有一个名为new_todos的方法,如下所示 需要为Call.rb、Postalcard.rb等提供相同的方法 与其在活动记录的多个模型中剪切和粘贴这个片段,我如何让它只编写一次,并使其可用于适当的模型 我怀疑把一个模块放在/lib文件夹中是可行的,但我不确定……谢谢 def new_todos Contact.campaign_id_is(self.campaign_id).each do |contact| todo = To

对于一个名为Email.rb的模型,我有一个名为new_todos的方法,如下所示

需要为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

正如您所说,您可以创建一个模块并将其包含在需要的地方

#lib/todo_extension.rb

module TodoExtension

  def new_todos
    ...
  end

end

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

如果模块的唯一目的是为每个包含的类/模块提供相同的方法集,则没有理由“去元”(
self.included
klass.class\u eval
)。只需在模块中定义方法,并将模块包含在需要这些方法的类中。