在帮助器内的类中设置default_url_options [:host]的最佳方法

时间:2016-08-10 10:14:23

标签: ruby-on-rails

我在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时传递它,但这感觉不对。任何简单的解决方案或我遗漏的明显事物?

2 个答案:

答案 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

这就成功了。