Ruby on rails 如何从视图中调用application helper中的方法?

Ruby on rails 如何从视图中调用application helper中的方法?,ruby-on-rails,Ruby On Rails,我在application_helper.rb文件中定义了一个自定义方法,如下所示: def rxtrnk(line) rxTRNK = /\w{9,12}/m trnks = Array.new i = 0 while i <= line.size if line[i].match(rxTRNK) trnks[i] = line[i].scan(rxTRNK) end i += 1

我在application_helper.rb文件中定义了一个自定义方法,如下所示:

def rxtrnk(line)
    rxTRNK = /\w{9,12}/m
    trnks = Array.new
    i = 0
    while i <= line.size
        if line[i].match(rxTRNK)
            trnks[i] = line[i].scan(rxTRNK)
        end
        i += 1
    end

    return trnks
  end
def rxtrnk(行)
rxTRNK=/\w{9,12}/m
trnks=Array.new
i=0

而i您的TrunksController可能没有从ApplicationController扩展。应用程序控制器包括应用程序帮助程序,因此如果您从中扩展控制器,您应该可以访问这些方法

控制器的开始部分应类似于:

class TrunksController < ApplicationController
class-TrunksController
不确定问题出在哪里,但您可以通过在控制器中包含应用程序帮助程序来解决此问题

class TrunksController 
    include ApplicationHelper
end
在视图调用中:

<%= @controller.rxtrnk %>

您应该确保包含要调用的方法的帮助程序包含在当前控制器中(在您的情况下,您希望包含ApplicationHelper)。这是通过在控制器顶部进行控制的

许多Rails开发人员默认只包含所有助手,以避免考虑这一点。要执行此操作,请将“
helper:all
”添加到应用程序控制器的顶部:

class ApplicationController < ActionController::Base
  helper :all
end
class ApplicationController
您还可以选择仅包括ApplicationHelper:

class ApplicationController < ActionController::Base
  helper ApplicationHelper
end
class ApplicationController结束
对不起,作为一个傻瓜,我没有完全得到你的回应。你是说我已经有了一个名为Trunks的控制器。他是说
TrunksController
不是从
ApplicationController
继承的,因此不能访问
ApplicationHelper
,这是正确的答案。因为TrunksController中的错误是
nomethoder错误#routeperswitch
,正在控制器的上下文中调用该方法。助手方法通常无法从控制器访问,因此您必须显式地包括定义它们的模块,如ez。此处建议。正如@Pete指出的,您不是从
ApplicationController
继承的-因此,如果您将控制器的第一行固定为
class TrunksController
,它应该从
ApplicationController
继承您的应用程序\u助手
<%= @controller.rxtrnk %>
class ApplicationController < ActionController::Base
  helper :all
end
class ApplicationController < ActionController::Base
  helper ApplicationHelper
end