17

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

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

谢谢,科林

4

5 回答 5

26

要为当前请求设置 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
于 2011-06-04T22:09:12.853 回答
24

我相信首选的方法是现在告诉路由器处理这个问题:

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

您可以将此行放入其中之一routes.rb或初始化器中。无论您喜欢哪个。如果值根据您的环境发生变化,您甚至可以将其放入您的环境配置中。

于 2011-05-23T18:12:40.823 回答
4

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

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

于 2012-08-23T19:02:18.470 回答
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

于 2015-09-24T21:16:41.237 回答
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
于 2019-01-16T03:33:44.580 回答