4

Rails アプリのいずれかの環境でホストを強制する必要があります。

含めることでオーバーライドを機能させることができます

  def default_url_options(opts={})
   opts.merge({:host => 'stg.my-host.com'})
  end

app/controllers/application.rb 内

しかし、できれば config/environments/... ファイルで、初期化時にこれを設定する方法はありますか? 条件付き環境ロジックをコントローラーから除外したいと思います。

でもやってみると

   config.action_controller.default_url_options = { ... }

あるいは

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

config.after_initialize { ... } でラップしても、「未定義のメソッド」が表示されます

何かご意見は?

4

1 に答える 1

6

答えは...それは不可能です。なぜなら、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
于 2010-10-14T15:30:23.337 に答える