当我打电话
@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
N.B。我也从另一个视图调用此方法,并且该方法有效-由于某种原因,在此特定视图中我收到了错误消息。
答案 0 :(得分:1)
您应该将助手方法移动到单独的模块中,然后使用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
目录中),则无需在控制器中包含该模块,因为在默认情况下,控制器视图。但是,您仍然必须将模块包含在邮件程序中,以使该方法在邮件程序视图中可用。
如果您还需要在控制器中调用helper方法,则可以使用helpers
方法来进行操作,该方法使您可以访问helper方法。
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