Подтвердить что ты не робот

Как вызвать метод в помощнике приложения из представления?

Я определил пользовательский метод в файле 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

Затем я попытался вызвать его из вида следующим образом:

<% @yo = rxtrnk(@rts)%>

Но я получаю страницу с ошибкой:

NoMethodError in TrunksController#routesperswitch

undefined method `rxtrnk' for #<TrunksController:0x7f2dcf88>

Я знаю, что это очень новичок вопрос, но я не мог найти решение от googling:( Спасибо за вашу помощь.

edit/here - полное application_helper.rb

module ApplicationHelper
     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

end
4b9b3361

Ответ 1

не уверен, в чем проблема, но вы можете решить эту проблему, включив application_helper в контроллер

class TrunksController 
    include ApplicationHelper
end

В режиме просмотра:

<%= @controller.rxtrnk %>

Ответ 2

Вы должны убедиться, что помощник, содержащий метод, который вы хотите вызвать, включен текущим контроллером (в вашем случае вы хотите включить ApplicationHelper). Это контролируется с помощью метода helper в верхней части контроллеров.

Многие разработчики Rails по умолчанию включают всех помощников, чтобы не думать об этом. Для этого добавьте "helper :all" в начало вашего ApplicationController:

class ApplicationController < ActionController::Base
  helper :all
end

Вы также можете выбрать только ApplicationHelper:

class ApplicationController < ActionController::Base
  helper ApplicationHelper
end

Ответ 3

ваш TrunksController может не распространяться из ApplicationController. Контроллер приложения включает помощник приложения, поэтому, если вы расширяете его форму контроллера, вы должны иметь доступ к этим методам.

Начало вашего контроллера должно быть примерно таким:

class TrunksController < ApplicationController