Подтвердить что ты не робот

Default_url_options и rails 3

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

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

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

4b9b3361

Ответ 1

Чтобы задать параметры 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

Ответ 2

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

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

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

Ответ 4

Для 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 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

Ответ 5

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