如何从ApplicationHelper调用ApplicationController方法

时间:2011-05-12 23:37:50

标签: ruby-on-rails ruby ruby-on-rails-3 controller view-helpers

我想在视图中提供csv链接,并将csv生成代码放在ApplicationHelper中。但是我收到了这个错误:

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

参考:

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

如果我将csv代码放在控制器中,它可以正常工作。我希望使用帮助器来避免为每个我想为csv选项提供csv选项的控制器定义路由(我有一堆)。如何让助手可以使用send_data(和其他必要的方法)?

2 个答案:

答案 0 :(得分:110)

使用helper_method

默认情况下,ApplicationController中的方法只能在控制器中访问。

ApplicationController添加方法并将其作为辅助方法公开helper_method

class ApplicationController < ActionController::Base

  helper_method :foo

  def foo
    "bar"
  end

end

现在,控制器视图都可以访问foo方法。

答案 1 :(得分:10)

如果问题是在所有控制器中使ApplicationHelper中的方法可用,为什么不添加一行

include ApplicationHelper

到ApplicationController文件?