由于不推荐使用ActionController :: Base#default_url_options,我想知道如何在rails3中设置默认的url选项。默认的url选项不是静态的,而是依赖于当前请求。
http://apidock.com/rails/ActionController/Base/default_url_options
谢谢, 科林
答案 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