【问题标题】:How to call ApplicationController methods from ApplicationHelper如何从 ApplicationHelper 调用 ApplicationController 方法
【发布时间】:2011-05-12 23:37:49
【问题描述】:

我想在视图中提供 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(和其他必要的方法)?

【问题讨论】:

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

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


【解决方案1】:

使用helper_method。

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

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

class ApplicationController < ActionController::Base

  helper_method :foo

  def foo
    "bar"
  end

end

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

【讨论】:

  • 我认为小狗图标让我为你投票。如此聪明的哈里什!
【解决方案2】:

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

包括 ApplicationHelper

到 ApplicationController 文件?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多