1. ホーム
  2. ruby-on-rails

Railsコントローラからヘルパーメソッドを呼び出そうとするとNoMethodErrorが発生する

2023-09-04 10:18:22

質問

私は NoMethodError が表示されます。これは、ヘルパーモジュールで定義されたメソッドにコントローラクラスからアクセスしようとしたときに発生します。私のRailsアプリケーションでは helper クラスメソッドに :all のようなシンボルを使用します。

class ApplicationController < ActionController::Base
  helper :all
  .
  .
end

私の理解では、これによりすべてのコントローラクラスが自動的にapp/helpersディレクトリ内のすべてのヘルパーモジュールをインクルードし、したがってすべてのメソッドがコントローラに混在するようになるはずです。これは正しいのでしょうか?

もし私が明示的に include を指定すると、すべてが正しく動作します。

どのように解決するのですか?

helper :all はすべてのヘルパー(そう、すべてのヘルパー)をビューで利用できるようにしますが、コントローラにはそれらを含めません。

ヘルパーとコントローラの間で何らかのコードを共有したい場合、ヘルパーはUIのコードで、コントローラはまあコントローラのコードなので、あまり望ましいことではありませんが、ヘルパーをコントローラに含めるか、別のモジュールを作成してそれをコントローラとヘルパーに含めるかのどちらかになります。