如何使同一个方法可用于 Rails 中的多个模型?

发布于 2024-10-01 12:06:09 字数 617 浏览 1 评论 0原文

对于一个名为 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

For one Model called Email.rb, I have a method shown below called new_todos.

This same method needs to be made available for Call.rb, Postalcard.rb, etcetera.

Rather than cutting and pasting this exact snippet across multiple Models of Active Records, how can I have it written just once and make it available to the appropriate Models?

I suspect it could work by putting a module in the /lib folder, but I'm not exactly sure....thanks!

  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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮生未歇 2024-10-08 12:06:09

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

#lib/todo_extension.rb

module TodoExtension

  def new_todos
    ...
  end

end

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

As you say, you can create a module and include it where you need it.

#lib/todo_extension.rb

module TodoExtension

  def new_todos
    ...
  end

end

# call.rb, postalcard.rb...
  include TodoExtension
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文