web-dev-qa-db-ja.com

ApplicationHelperからApplicationControllerメソッドを呼び出す方法

ビューにcsvリンクを提供し、csv生成コードをApplicationHelperに配置しました。しかし、私はこのエラーを受け取っています:

undefined method `send_data' for #<#<Class:0x0000010151c708>:0x0000010151a070>

これを参照:

send_data content, :type => "text/plain",
  :filename => filename,
  :disposition => 'attachment'

コントローラにcsvコードを配置すると、正常に機能します。私はヘルパーを使用して、csvオプションを提供したいすべてのコントローラーのルートを定義することを避けたいと思っていました(私はたくさんあります)。どうすればsend_data(および他の必要なメソッド)ヘルパーが利用可能ですか?

48
David

helper_methodを使用します。

デフォルトでは、ApplicationControllerのメソッドはコントローラー内でのみアクセス可能です。

メソッドをApplicationControllerに追加し、helper_methodを使用してヘルパーメソッドとして公開します。

class ApplicationController < ActionController::Base

  helper_method :foo

  def foo
    "bar"
  end

end

これで、fooメソッドは両方のコントローラーおよびビューからアクセス可能になりました。

111
Harish Shetty

問題がApplicationHelperのメソッドをすべてのコントローラーで使用可能にすることである場合、行を追加しないでください

 ApplicationHelperを含める

applicationControllerファイルに?

10
GeorgeW