default_url_options set di inizializzazione
-
30-09-2019 - |
Domanda
ho bisogno di forzare l'ospite in uno degli ambienti della mia applicazione Rails.
Ho può ottenere la sostituzione di lavoro includendo
def default_url_options(opts={})
opts.merge({:host => 'stg.my-host.com'})
end
in app / controllers / application.rb
Ma c'è un modo per impostare questo su di inizializzazione, preferibilmente in un / ambiente / ... file di configurazione? Mi piacerebbe mantenere la logica condizionale ENV fuori del controller.
Ma quando provo
config.action_controller.default_url_options = { ... }
o anche
ActionController::Base.default_url_options = { ... }
I get "metodo non definito", anche se un involucro in un config.after_initialize {...}
tutti i pensieri?
Soluzione
La risposta è ... è impossibile, perché default_url_options è implementato come una funzione, non un attr.
Da 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
Altri suggerimenti
È possibile forzare la configurazione in questo modo:
config.action_mailer.default_url_options = { :host => "foo.com" }
Il problema nel codice è che hai utilizzato config.action_controller
invece di config.action_mailer