Rails 3在模型中路由助手不遵守子URI

时间:2013-09-18 18:04:24

标签: ruby-on-rails ruby-on-rails-3 nginx unicorn

使用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文件中定义。这是有效的,但是一种正确的方法,而且我不想在一年后不可避免地忘记它时保持这个。

2 个答案:

答案 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