Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 模型中的Rails 3路由帮助程序不考虑子URI_Ruby On Rails_Ruby On Rails 3_Nginx_Unicorn - Fatal编程技术网

Ruby on rails 模型中的Rails 3路由帮助程序不考虑子URI

Ruby on rails 模型中的Rails 3路由帮助程序不考虑子URI,ruby-on-rails,ruby-on-rails-3,nginx,unicorn,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_pa

使用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)。当直接从视图中调用
编辑车辆路径
时,此功能可以正常工作。我以前通过创建自己的助手解决了这个问题:

module ApplicationHelper
  def self.sub_uri_path(path)
    root = Rails.application.config.relative_url_root
    return '%s%s' % [ root, path ]
  end
end

config.relative\u url\u root
在我的
config/environment
文件中定义。这是可行的,但必须有一个适当的方法来实现,而且我不想在一年后不可避免地忘记它的时候保持它。

为什么不将您的路线纳入范围

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

请参见您可以使用:script\u name参数进行设置:

Rails.application.routes.url_helpers.edit_vehicle_path(self, :script_name => '/app')

如果有帮助,请回答正确。thx:)谢谢,但是我不需要查看我所有的资源吗?如果我想在某个时候更改子URI呢?如果子URI在测试中与在生产中不同怎么办?只有url会改变。。你的链接助手将保持不变。对于测试/生产差异,你可以看到我更新的帖子是的,我更喜欢这一点,但Unicorn或Nginx配置中是否有一种方法可以传播到Rails?我仍然想知道是否有一种系统级的解决方案,但我越想越想,从配置中确定整个应用程序的范围是一个简单的过程,这很好。我就是这么做的:
scope(Rails.application.config.respond_to?(:url_root)?Rails.application.config.url_root:“/”)do…
,其中
config.url_root
可以在我的环境文件中定义。