ruby-on-rails – 在多个模型中放置通用代码的位置?

我有两个模型包含相同的方法:

def foo
  # do something
end

我应该把它放在哪里?

我知道通用代码在Rails应用程序的lib目录中。

但是如果我把它放在一个名为’Foo’的lib类中,我需要将它的功能添加到我的ActiveRecord模型中,我可以这样做:

class A < ActiveRecord::Base
includes Foo

class B < ActiveRecord::Base
includes Foo

然后A和B都将包含foo方法,就像我在每个方法中定义的一样?

创建一个可以放入lib目录的模块:

module Foo
  def foo
    # do something
  end
end

然后,您可以将模块包含在每个模型类中:

class A < ActiveRecord::Base
  include Foo
end

class B < ActiveRecord::Base
  include Foo
end

A和B模型现在将定义一个foo方法。

如果您使用模块的名称和文件的名称(例如foo.rb中的Foo和foo_bar.rb中的FooBar)遵循Rails命名约定,则Rails将为您自动加载该文件。否则,您将需要使用require_dependency’file_name’来加载您的lib文件。

http://stackoverflow.com/questions/1698225/where-to-put-common-code-found-in-multiple-models

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ruby-on-rails – 在多个模型中放置通用代码的位置?