初始化时设置default_url_options

时间:2010-10-13 22:40:01

标签: ruby-on-rails initialization boot actioncontroller

我需要在我的rails应用程序中的某个环境中强制主机。

我可以通过包含

来使覆盖工作
  def default_url_options(opts={})
   opts.merge({:host => 'stg.my-host.com'})
  end
app / controllers / application.rb中的

但有没有办法在初始化时设置它,最好是在config / environments / ...文件中?我想将条件env逻辑保留在控制器之外。

但是当我尝试

   config.action_controller.default_url_options = { ... }

甚至

ActionController::Base.default_url_options = { ... }

我得到“未定义的方法”,即使在config.after_initialize中包裹{...}

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

答案是......这是不可能的,因为default_url_options是作为函数实现的,而不是attr。

来自action_pack / action_controller / base.rb:1053:

  # Overwrite to implement a number of default options that all url_for-based methods will use. The default options should come in
  # the form of a hash, just like the one you would use for url_for directly. Example:
  #
  #   def default_url_options(options)
  #     { :project => @project.active? ? @project.url_name : "unknown" }
  #   end
  #
  # As you can infer from the example, this is mostly useful for situations where you want to centralize dynamic decisions about the
  # urls as they stem from the business domain. Please note that any individual url_for call can always override the defaults set
  # by this method.
  def default_url_options(options = nil)
  end

答案 1 :(得分:1)

您可以这样强制配置:

config.action_mailer.default_url_options = { :host => "foo.com" }

您的代码中的问题是您使用config.action_controller代替config.action_mailer