由于ActionController :: Base#default_url_options已被弃用,我想知道如何在rails3中设置默认的url选项。默认的url选项不是静态的,而是依赖于当前请求。
http://apidock.com/rails/ActionController/Base/default_url_options
谢谢,Corin
由于ActionController :: Base#default_url_options已被弃用,我想知道如何在rails3中设置默认的url选项。默认的url选项不是静态的,而是依赖于当前请求。
http://apidock.com/rails/ActionController/Base/default_url_options
谢谢,Corin
要为当前请求设置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
:profile
设置为 comment.user.city_name
,这样我们就可以得到 /newyork/comments/123
? - QWJ QWJ我相信现在首选的方法是告诉路由器处理这个问题:
Rails.application.routes.default_url_options[:foo]= 'bar'
你可以将这行代码放在 routes.rb
或者初始化文件中,看你喜欢哪一个。如果根据环境值的变化,你甚至可以将其放在环境配置中。account_id
?例如 scope '/:account_id'
- 您如何能够在配置级别动态设置 account_id
? - Mohamad那个apidock.com的链接有误导性。 default_url_options并没有被弃用。
http://guides.rubyonrails.org/action_controller_overview.html#default_url_options
对于特定的 Rails 3,最常规的做法是在您的 ApplicationController
中添加一个 default_url_options
方法。
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
Rails.application.routes.default_url_options[:host] = 'localhost:3000'
在 development.rb / test.rb 中,可以更简洁地写成以下形式:
Rails.application.configure do
# ... other config ...
routes.default_url_options[:host] = 'localhost:3000'
end
ActionController::Base#default_url_options
未被废弃。 - Mohamad