11

奇妙なことに、次のlib/ような認証モジュールがあります。

module Authentication
  protected

  def current_user
    User.find(1)
  end

end

ApplicationController には、このモジュールとすべてのヘルパーを含めていますが、メソッド current_user はコントローラーで使用できますが、ビューからは使用できません :( どうすればこれを機能させることができますか?

4

2 に答える 2

31

メソッドがコントローラーで直接定義されている場合は、 を呼び出してビューで使用できるようにする必要がありますhelper_method :method_name

class ApplicationController < ActionController::Base

  def current_user
    # ...
  end

  helper_method :current_user
end

モジュールでも同じことができますが、少しトリッキーです。

module Authentication
  def current_user
    # ...
  end

  def self.included m
    return unless m < ActionController::Base
    m.helper_method :current_user # , :any_other_helper_methods
  end
end

class ApplicationController < ActionController::Base
  include Authentication
end

ああ、はい、あなたのモジュールが厳密にヘルパーモジュールであることを意図しているなら、Lichtamberg が言ったようにすることができます。ただし、名前を付けてフォルダーAuthenticationHelperに入れることもできます。app/helpers

ただし、認証コードに関する私自身の経験では、コントローラーとビューの両方で使用できるようにする必要があります通常、コントローラーで承認を処理するためです。ヘルパーは、ビューでのみ使用できます。(元々は、複雑な html 構造の短縮形として意図されていたと思います。)

于 2009-08-12T10:22:36.723 に答える
1

で宣言しましたか

  helper :foo             # => requires 'foo_helper' and includes FooHelper
  helper 'resources/foo'  # => requires 'resources/foo_helper' and includes Resources::FooHelper

あなたのApplicationControllerで?

http://railsapi.com/doc/rails-v2.3.3.1/classes/ActionController/Helpers/ClassMethods.html#M001904

于 2009-08-12T10:21:28.660 に答える