如何从ApplicationHelper调用ApplicationController方法

48

我希望在视图中提供csv链接,我将生成csv的代码放在ApplicationHelper中。然而,我遇到了这个错误:

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

参考这个:

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

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


未经测试的想法:检查调用它的类名。将方法重命名为其他名称是否有帮助(可能是Rails中已定义的send_data方法?) - Zabba
是的,它是一个Rails定义的方法,但似乎只能通过控制器访问。 - David
2个回答

113

使用helper_method

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

将一个方法添加到ApplicationController中,并使用helper_method将其公开为辅助方法:

class ApplicationController < ActionController::Base

  helper_method :foo

  def foo
    "bar"
  end

end

现在foo方法对控制器和视图都可访问。


1
我觉得那只小狗图标让我给你点赞了。太聪明了,哈里什! - Abram

10

如果问题是要在所有控制器中使用ApplicationHelper中的方法,为什么不在ApplicationController文件中添加以下代码行:

include ApplicationHelper


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接