如何跨模型共享代码?(Rails 2.3)

Yuv*_*rmi 13 ruby-on-rails

我有几种方法可以在模型之间共享,而不是复制和粘贴它们.在控制器中,我可以通过将方法放在application_controller.rb中来实现,该方法自动包含在每个控制器中.模特有类似的东西吗?

谢谢!

Jos*_*man 16

您可以functionality.rblibRails应用程序的目录中创建一个名为或类似的文件.使模块命名的文件在Rails启动时自动加载.例如,如果我想向多个模型添加标记,我会创建一个名为的文件lib/flagging.rb,它看起来像这样:

module Flagging
  # Flags an object for further review
  def flag!
    self.update_attribute(:flagged, true)
  end

  # Clears all flags on an object
  def deflag!
    self.update_attribute(:flagged, false)
  end
end
Run Code Online (Sandbox Code Playgroud)

在我希望添加此功能的每个模型中,我会执行以下操作:

class Foo < ActiveRecord::Base
  include Flagging
end
Run Code Online (Sandbox Code Playgroud)

然后,我就可以做类似的事情:

foo = Foo.create
foo.flag!
Run Code Online (Sandbox Code Playgroud)