我在app / helpers中有一个名为MailersHelper的助手:
module MailersHelper
class MailerBody
include Rails.application.routes.url_helpers
def initialize data
set_instance_vars data
end
def text(*args)
@inst_url = "Institution url: #{provider_url(@provider)}"
...
end
end
end
我从名为MailerBody
的邮件中初始化AdminMailer
:
def notify_course_modified course
body = MailerBody.new(course).for_c_modified
mail(...,body: body)
end
但是,我收到以下错误:
缺少主机链接!请提供:host参数,设置default_url_options [:host],或将:only_path设置为true
(迹线指向它所称的provider_url(@provider)
行
development.rb :
config.action_mailer.default_url_options = {:host => "localhost:3000"}
但是,在BodyMailer中,default_url_options[:host]
是零。
我可以在初始化BodyMailer时传递它,但这感觉不对。任何简单的解决方案或我遗漏的明显事物?
答案 0 :(得分:3)
我安顿下来了:
config.after_initialize do
Rails.application.routes.default_url_options[:host] = 'localhost:3000'
end
在config / environments / development.rb中,在块
中Rails.application.configure do
我也需要将其添加到测试和制作中。
答案 1 :(得分:0)
结果ActionMailer::Base
定义了default_url_options[:host]
。我只需要在初始化时进行设置:
def initialize data
default_url_options[:host] = ActionMailer::Base.default_url_options[:host]
set_instance_vars data
end
这就成功了。