Ruby on rails 从ActionMailer视图调用控制器中的帮助程序方法时出现未定义的方法错误
当我打电话时Ruby on rails 从ActionMailer视图调用控制器中的帮助程序方法时出现未定义的方法错误,ruby-on-rails,Ruby On Rails,当我打电话时 @certificate, @exp_date = certificate_with_date(@int, @coach) 在我的电子邮件模板视图中,我遇到以下错误: undefined method `certificate_with_date' for #<#<Class:0x0000564473b34af8>:0x0000564473b31ec0> 这就是所讨论的方法 def certificate_with_date(num, coach)
@certificate, @exp_date = certificate_with_date(@int, @coach)
在我的电子邮件模板视图中,我遇到以下错误:
undefined method `certificate_with_date' for #<#<Class:0x0000564473b34af8>:0x0000564473b31ec0>
这就是所讨论的方法
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.我也从另一个视图调用此方法,它可以工作-由于某种原因,在这个特定视图中我得到一个错误。您应该将助手方法移动到一个单独的模块中,然后使用
add\u template\u helper
方法将该模块包括在控制器和邮件程序中。然后,帮助器方法将在controller和mailer视图中可用
module SomeHelper
def some_shared_method
# ...
end
end
class SomeController
add_template_helper SomeHelper
end
class SomeMailer
add_template_helper SomeHelper
end
注意:如果将代码放入助手模块(在app/helpers
目录中),则无需将模块包括到控制器中,因为默认情况下,控制器视图中提供了助手模块方法。但是,您仍然需要将模块包含到邮件程序中,以使该方法在邮件程序视图中可用
module SomeHelper
def some_shared_method
# ...
end
end
class SomeController
add_template_helper SomeHelper
end
class SomeMailer
add_template_helper SomeHelper
end
如果还需要在控制器中调用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
请将路径和名称文件写入代码的每一部分,这将有助于理解从何处调用和调用什么!非常感谢。电子邮件模板?你是说在行动邮件里?在这种情况下,您还需要将该方法放入邮件程序中。最好,你把它放到一个助手中,并将该助手包含在mailer@phoet中谢谢!我认为在控制器中显式地包含helper方法就足以在ActionMailer视图中使用。我将该方法放入了一个帮助程序中,并将add_template_helper添加到我的mailer类中,它成功了:)感谢您的详细回复,它已修复了我的错误:)