在rails中,哪里是放置需要“随处”可用的方法的正确位置

时间:2012-12-15 01:16:44

标签: ruby-on-rails helper

我有很多小实用工具方法(例如重新格式化或解析像字符串这样的简单对象)我一直在使用ApplicationHelper。

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

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

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

它似乎有效。但它似乎是一块垃圾。

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

1 个答案:

答案 0 :(得分: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 (对于控制器)ApplicationHelper (对于观看次数),以及我需要的其他地方(即。这里和那里的特定模型)我只是做

include ::Deefour::Helpers