首页 > 解决方案 > 如何在控制器中拥有与视图相同的功能访问权限

问题描述

我的视图中的某些功能(例如辅助功能)在我的控制器中无法访问。
我知道我可以在我的控制器中包含辅助功能以进行访问但是如果这个辅助功能调用另一个辅助功能我有一个 MethodError !

例子

在我看来:

...
<%= myHelperFunction %>

在助手中:

module Helper
  def myHelperFunction
    myHelper2Function # it's a call of another helper
  end
end

在控制器中:

  include Helper

def myRouteAction
  myHelperFunction # no method error
  Helper.myHelperFunction # no method error

  myHelperFunction # i can call it BUT i've a no method error on the second function called
                   # myHelper2Function
end

标签: ruby-on-rails

解决方案


您不能include MyHelper在控制器操作内,您必须在操作外添加此行,如下所示:

include MyHelper
def index
  myHelperFunction1
end

现在,假设您有 2 个 Helpers -ArticlesHelper并且PostsHelper,那么您可以执行以下操作:

# articles_helper.rb
module ArticlesHelper
  # Need to include this helper since you'll call `mnop` method from PostsHelper
  include PostsHelper

  def abcd
    efgh
  end

  def efgh
    "Hello from EFGH in ArticlesHelper"
  end

  def ijkl
    # calls `mnop` method from PostsHelper
    mnop
  end
end


# posts_helper.rb
module PostsHelper

  def mnop
    "Hello from mnop from PostsHelper"
  end
end

然后在您的任何控制器中,您可以执行以下操作:

include ArticlesHelper
def myRouteAction
  @hello = abcd
  @hello2 = ijkl
end

然后在您的视图中,执行以下操作:

<%= @hello %>
# "Hello from EFGH in ArticlesHelper"

<%= @hello2 %>
# "Hello from mnop from PostsHelper"

我认为上面的例子说明了所有的场景。


推荐阅读