Неопределенная ошибка метода при вызове вспомогательного метода в контроллере из представления ActionMailer - PullRequest
0 голосов
/ 25 апреля 2019

Когда я звоню

@certificate, @exp_date = certificate_with_date(@int, @coach)

в моем шаблоне электронной почты, я получаю следующую ошибку:

undefined method `certificate_with_date' for #<#<Class:0x0000564473b34af8>:0x0000564473b31ec0>

В моем контроллере я включил

helper_method :certificate_with_date

Это рассматриваемый метод;

def certificate_with_date(num, coach)
    if num == 1
      return 'DBS', coach.DBS
    elsif num == 2
      return 'Safety', coach.safe_qual
    elsif num == 3
      return 'Coach', coach.coach_qual
    elsif num = 4
      return 'First Aid', coach.first_aid
    end
  end

Примечание. Я также вызываю этот метод из другого представления, и он работает - по какой-то причине в этом конкретном представлении я получаю сообщение об ошибке.

1 Ответ

1 голос
/ 25 апреля 2019

Вы должны переместить ваш вспомогательный метод в отдельный модуль, а затем включить модуль в контроллер и почтовую программу, используя метод add_template_helper. Тогда вспомогательные методы будут доступны в представлениях контроллера и почтовой программы.

module SomeHelper
  def some_shared_method
    # ...
  end
end

class SomeController
  add_template_helper SomeHelper
end

class SomeMailer
  add_template_helper SomeHelper
end

Примечание: Если вы поместите код в вспомогательный модуль (в каталоге app/helpers), вам не нужно будет включать модуль в контроллер, так как методы вспомогательных модулей доступны в представлениях контроллера: дефолт. Однако вам все равно придется включить модуль в почтовую программу, чтобы сделать метод доступным в представлениях почтовой программы.


Если вам также необходимо вызвать вспомогательный метод в контроллере, вы можете сделать это с помощью метода helpers, который дает вам доступ к вспомогательным методам.

class SomeController
  add_template_helper SomeHelper

  def some_method
    # ...
    # calling a helper method in controller 
    helpers.some_shared_method
    # ...
  end 
end

Или вы можете включить модуль в контроллер, используя метод include, чтобы методы были доступны непосредственно в контроллере.

class SomeController
  include SomeHelper

  def some_method
    # ...
    # calling the included method 
    some_shared_method
    # ...
  end 
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...