default_url_options和rails 3

时间:2011-05-23 17:54:14

标签: ruby-on-rails-3 actioncontroller

由于不推荐使用ActionController :: Base#default_url_options,我想知道如何在rails3中设置默认的url选项。默认的url选项不是静态的,而是依赖于当前请求。

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

谢谢, 科林

5 个答案:

答案 0 :(得分:24)

我认为首选的方法是告诉路由器处理这个问题:

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

您可以将此行放在routes.rb或初始值设定项中。无论你喜欢什么。如果值根据您的环境而变化,您甚至可以将它放在您的环境配置中。

答案 1 :(得分:24)

要设置当前请求的url选项,请在控制器中使用以下内容:

class ApplicationController < ActionController::Base

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

end

现在,:profile =&gt; current_profile将自动注册到path / url参数。

路由示例:

scope ":profile" do
  resources :comments
end

只需写下:

comments_path

如果current_profile将to_param设置为'lucas':

/lucas/comments

答案 2 :(得分:4)

该apidock.com链接具有误导性。不推荐使用default_url_options。

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

答案 3 :(得分:0)

对于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#default_url_options

答案 4 :(得分:0)

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

在developemnt.rb / test.rb中,可以更加简洁如下:

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

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