default_url_options и рельсы 3

Поскольку ActionController::Base#default_url_options устарела, мне интересно, как установить параметры URL по умолчанию в rails3. Параметры URL по умолчанию не являются статическими, но зависят от текущего запроса.

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

Спасибо Корин

4 ответа

Решение

Чтобы установить параметры URL для текущего запроса, используйте что-то вроде этого в вашем контроллере:

class ApplicationController < ActionController::Base

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

end

Теперь:profile => current_profile будет автоматически объединен с параметрами path/url.

Пример маршрутизации:

scope ":profile" do
  resources :comments
end

Просто пиши:

comments_path

и если current_profile установил to_param в 'lucas':

/lucas/comments

Я полагаю, что предпочтительный метод заключается в том, чтобы теперь сказать маршрутизатору обработать это:

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

Вы можете поставить эту строку в любом routes.rb или инициализатор. Что бы вы ни предпочли. Вы даже можете поместить его в конфигурацию вашей среды, если значения меняются в зависимости от вашей среды.

Эта ссылка на apidock.com вводит в заблуждение. default_url_options не рекомендуется.

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

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

В developmnt.rb / test.rb, может быть более кратким, как показано ниже:

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

  routes.default_url_options[:host] = 'localhost:3000'
end

В частности, для Rails 3 каноническим способом сделать это является добавление default_url_options метод к вашему ApplicationController,

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

Другие вопросы по тегам