将default_url_options设置为初始化
-
30-09-2019 - |
题
我需要在我的Rails应用程序中的一个环境中迫使主机。
我可以通过包括
def default_url_options(opts={})
opts.merge({:host => 'stg.my-host.com'})
end
在应用程序/控制器/应用程序中
但是,是否有一种方法可以在初始化中设置此设置,最好是在配置/环境/...文件中?我想将有条件的env逻辑放在控制器之外。
但是当我尝试
config.action_controller.default_url_options = { ... }
甚至
ActionController::Base.default_url_options = { ... }
即使在config.after_initialize {...}
有什么想法吗?
解决方案
答案是...这是不可能的,因为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
其他提示
您可以以这种方式强制配置:
config.action_mailer.default_url_options = { :host => "foo.com" }
代码中的问题是您已经使用过 config.action_controller
代替 config.action_mailer
不隶属于 StackOverflow