web-dev-qa-db-ja.com

default_url_optionsおよびRails 3

ActionController :: Base#default_url_optionsは非推奨になっているため、Rails3でデフォルトのURLオプションを設定する方法を知りたいと思います。デフォルトのURLオプションは静的ではありませんが、現在のリクエストに依存しています。

http://apidock.com/Rails/ActionController/Base/default_url_options

ありがとう、コリン

17
gucki

現在のリクエストのURLオプションを設定するには、コントローラーで次のようなものを使用します。

class ApplicationController < ActionController::Base

  def url_options
    { :profile => current_profile }.merge(super)
  end

end

これで、:profile => current_profileがパス/ URLパラメーターに自動マージされます。

ルーティングの例:

scope ":profile" do
  resources :comments
end

書くだけ:

comments_path

current_profileがto_paramを 'lucas'に設定している場合:

/lucas/comments
24
Lukasz Sliwa

推奨される方法は、ルーターにこれを処理するように指示することだと思います。

Rails.application.routes.default_url_options[:foo]= 'bar' 

この行はどちらかに入れることができますroutes.rbまたは初期化子。あなたが好む方。値が環境に基づいて変化する場合は、環境構成に含めることもできます。

24
Dylan Markow

そのapidock.comリンクは誤解を招く恐れがあります。 default_url_optionsは非推奨ではありません。

http://guides.rubyonrails.org/action_controller_overview.html#default_url_options

4
Jason Heiss

Rails.application.routes.default_url_options[:Host]= 'localhost:3000'

Developmentemnt.rb/test.rbでは、次のように簡潔にすることができます。

Rails.application.configure do
  # ... other config ...

  routes.default_url_options[:Host] = 'localhost:3000'
end
0
Derek Fan

Rails 3の場合、具体的には、それを行うための標準的な方法は、ApplicationControllerdefault_url_optionsメソッドを追加することです。

class ApplicationController < ActionController::Base
  def default_url_options
    {
        :Host => "corin.example.com",
        :port => "80"  #  Optional. Set nil to force Rails to omit
                       #    the port if for some reason it's being
                       #    included when you don't want it.
    }
  end
end

私はこれを自分で理解する必要があったので、それが機能することを知っています。

これは、Rails 3ガイド:
http://guides.rubyonrails.org/v3.2.21/action_controller_overview.html#default_url_options

0