0

使用 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

这将产生一个类似的 URL 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文件中定义。这行得通,但必须有一个适当的方法来做到这一点,而且我不想在一年后不可避免地忘记它时维护它。

4

2 回答 2

1

为什么不将您的路线包装到一个范围内?

scope Rails.env.production? ? '/app' : '/test' do
  resources :posts, :comments
  ...
end

请参阅http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing

于 2013-09-18T18:11:35.767 回答
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

于 2014-04-11T14:18:35.703 回答