使用Rails 3.2.13。
我已经设置了Nginx和Unicorn来从子URI提供Rails应用程序。我有一些视图,我需要发送资源链接,所以我使用模型的路径助手:
def to_exhibit()
return {
:label => self.id,
:name => self.name,
:edit_path => Rails.application.routes.url_helpers.edit_vehicle_path(self),
}
end
这会生成类似http://localhost:8080/vehicles/10/edit
的网址,但我真正想要的是http://localhost:8080/app/vehicles/10/edit
(其中/ app是我的子URI)。直接从视图调用edit_vehicle_path
时,这样可以正常工作。我之前通过创建自己的帮助程序来解决这个问题:
module ApplicationHelper
def self.sub_uri_path(path)
root = Rails.application.config.relative_url_root
return '%s%s' % [ root, path ]
end
end
config.relative_url_root
在我的config/environment
文件中定义。这是有效的,但有是一种正确的方法,而且我不想在一年后不可避免地忘记它时保持这个。
答案 0 :(得分:1)
为什么不将路线包裹到范围内?
scope Rails.env.production? ? '/app' : '/test' do
resources :posts, :comments
...
end
请参阅http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing
答案 1 :(得分:0)
您可以使用:script_name参数设置它:
Rails.application.routes.url_helpers.edit_vehicle_path(self, :script_name => '/app')
http://zergsoft.blogspot.jp/2014/04/using-non-root-mount-point-with-rails-3.html