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 (コントローラーの場合)ApplicationHelper (ビューの場合)、およびその他の必要な場所(つまり、あちこちの特定のモデル)で、単純に行います。

include ::Deefour::Helpers
于 2012-12-15T01:23:45.073 に答える