3

我有很多小实用方法(例如用于重新格式化或解析字符串等简单对象)我一直在 ApplicationHelper 中。

但是,模型中的类方法显然不能访​​问 ApplicationHelper 方法。

有一个解决方法,就是在我的项目中洒水:

include ApplicationHelper # needed to use apphelper method in instance method
extend ApplicationHelper # needed to use apphelper method in class method

它似乎工作。但这似乎是一个杂牌。

有没有更好的地方放置实用程序方法,以便可以从我的项目中的任何地方访问它们 - 视图、控制器方法、模型实例方法、模型类方法?

4

1 回答 1

5

这是lib/为了什么。我有一个lib/deefour.rb文件

require "deefour/core_ext"

module Deefour; end

我将自定义方法放入lib/deefour/helpers.rb

module Deefour
  module Helpers
    extend self

    def some_method
      # ...
    end
  end
end

和核心猴子补丁lib/deefour/core_ext.rb

class String
  def my_custom_string_method(str)
    # ...
  end
end

config/initializers/deefour.rb我放

require "deefour"

在你config/application.rb确保你有

config.autoload_paths += Dir["#{config.root}/lib"]

最后,在ApplicationController (for controllers)ApplicationHelper (for views)以及我需要它的任何其他地方(即这里和那里的特定模型)我只是做

include ::Deefour::Helpers
于 2012-12-15T01:23:45.073 回答