Ruby on rails 我如何破解url帮助器/路由帮助器,使所有路径都添加前缀

Ruby on rails 我如何破解url帮助器/路由帮助器,使所有路径都添加前缀,ruby-on-rails,Ruby On Rails,我希望所有生成的URL都可以以/sample\u 1/作为前缀 因为服务器正在子文件夹下运行 在Rails 4.2.4上我该怎么做?以下路由规则不会生成带有前缀的所有路径 我无法通过谷歌找到任何可行的解决方案 routes.rb Application.rb 您是否尝试使用:as作为范围的前缀: scope "admin", :as => "admin" do resources :photos, :accounts end resources :photos, :accounts

我希望所有生成的URL都可以以
/sample\u 1/
作为前缀

因为服务器正在子文件夹下运行

在Rails 4.2.4上我该怎么做?以下路由规则不会生成带有前缀的所有路径

我无法通过谷歌找到任何可行的解决方案

routes.rb Application.rb
您是否尝试使用
:as
作为
范围的前缀:

scope "admin", :as => "admin" do
  resources :photos, :accounts
end

resources :photos, :accounts
这将生成诸如
admin\u photos\u path
admin\u accounts\u path
之类的路由,它们分别映射到/admin/photos和
/admin/accounts

:as
用指定的标签作为此范围内路由帮助程序的前缀

  scope :as => "sekret" do
    resources :posts
  end

您是否尝试使用
:as
作为
范围的前缀:

scope "admin", :as => "admin" do
  resources :photos, :accounts
end

resources :photos, :accounts
这将生成诸如
admin\u photos\u path
admin\u accounts\u path
之类的路由,它们分别映射到/admin/photos和
/admin/accounts

:as
用指定的标签作为此范围内路由帮助程序的前缀

  scope :as => "sekret" do
    resources :posts
  end

由于内置Rails
relative\u url\u root
选项,您可以使用以下解决方法:

Rails.application.routes.draw do
  # Bad hack because relative_url_root does not work.
  # @fixme, @todo
  scope ENV['MYAPP_RELATIVE_URL_ROOT'] do
   root 'welcome#category'
  end
end
调用
scope nil
实际上对结果路由没有任何影响,因此您可以简化很多

$ rake routes MYAPP_RELATIVE_URL_ROOT=foo
Prefix Verb URI Pattern    Controller#Action
  root GET  /foo(.:format) welcome#category
我不会在解决方案中使用
RAILS\u RELATIVE\u URL\u ROOT
,因为如果行为在未来的RAILS版本中得到修复,您的应用程序将意外中断。因此,一种安全的方法是将
RAILS\u RELATIVE\u URL\u ROOT
设置为未设置,直到您知道它已修复,然后删除hack

编辑。 它确实有效。你很可能做错了别的事情

  • git克隆https://github.com/maxcal/sandbox/tree/33344204
  • cd沙盒
  • bundle安装
  • MYAPP\u RELATIVE\u URL\u ROOT=测试rails s
  • 在浏览器中打开
    localhost:3000/test

  • 实际设置环境变量的方式取决于shell。以上内容适用于Bash/Zsh。我猜这就是你失败的地方。

    由于内置Rails
    相对url\u root
    选项,你可以使用一种解决方法:

    Rails.application.routes.draw do
      # Bad hack because relative_url_root does not work.
      # @fixme, @todo
      scope ENV['MYAPP_RELATIVE_URL_ROOT'] do
       root 'welcome#category'
      end
    end
    
    调用
    scope nil
    实际上对结果路由没有任何影响,因此您可以简化很多

    $ rake routes MYAPP_RELATIVE_URL_ROOT=foo
    Prefix Verb URI Pattern    Controller#Action
      root GET  /foo(.:format) welcome#category
    
    我不会在解决方案中使用
    RAILS\u RELATIVE\u URL\u ROOT
    ,因为如果行为在未来的RAILS版本中得到修复,您的应用程序将意外中断。因此,一种安全的方法是将
    RAILS\u RELATIVE\u URL\u ROOT
    设置为未设置,直到您知道它已修复,然后删除hack

    编辑。 它确实有效。你很可能做错了别的事情

  • git克隆https://github.com/maxcal/sandbox/tree/33344204
  • cd沙盒
  • bundle安装
  • MYAPP\u RELATIVE\u URL\u ROOT=测试rails s
  • 在浏览器中打开
    localhost:3000/test
  • 实际设置环境变量的方式取决于shell。以上内容适用于Bash/Zsh。我猜这就是你失败的地方。

    Rails文档:


    因为服务器正在子文件夹下运行

    这应该是Rails的问题

    如果您想将应用程序放在子文件夹中,则需要在web服务器软件的强制下对其进行路由

    以下是nginx的一个示例:

    server {
       listen 80;
       server_name your_folder.com;
       root /your/app/destination/folder;
    
    这意味着如果您坚持使用
    \u路径
    帮助程序(而不是
    \u url
    ),它将保持所有相关路径正常工作。

    Rails文档:


    因为服务器正在子文件夹下运行

    这应该是Rails的问题

    如果您想将应用程序放在子文件夹中,则需要在web服务器软件的强制下对其进行路由

    以下是nginx的一个示例:

    server {
       listen 80;
       server_name your_folder.com;
       root /your/app/destination/folder;
    

    这意味着如果您坚持使用
    \u路径
    帮助程序(而不是
    \u url
    ),它将保持所有的相对路径正常工作。

    如果您已经设置了Rails\u relative\u URL\u ROOT env var,Rails实际上应该为您的路由加前缀。但是我测试了它,它没有按照您的应用程序中记录的那样工作。rb您有这个设置吗:
    config.relative\u URL\u ROOT=env['Rails\u relative\u URL\u ROOT']
    @max我做了。但它不起作用,您实际上不需要设置
    config.relative\u url\u root=ENV['RAILS\u relative\u url\u root']
    。Rails将做到这一点,问题是
    config.relative\u url\u root
    似乎什么都不做@麦克斯,不管怎么说,这条线不会有什么害处,不是吗?那么,生成的URL仍然没有前缀
    sample\u 1
    ,你知道吗?如果你已经设置了Rails\u RELATIVE\u URL\u ROOT env var,Rails实际上应该给你的路由加前缀。但是我测试了它,它没有按照你的应用程序中的文档工作。rb你有这个设置:
    config.RELATIVE\u URL\u ROOT=env吗['RAILS\u RELATIVE\u URL\u ROOT']
    @max是我做的。但是它不起作用。你实际上不需要设置
    config.RELATIVE\u URL\u ROOT=ENV['RAILS\u RELATIVE\u URL\u ROOT']
    .Rails会这样做,问题是
    config.relative\u url\u root
    似乎什么也做不了。@max反正这行不会做什么坏事,不是吗?那么,生成的url还有什么没有前缀
    sample\u 1
    ,知道吗?我想他是想在web服务器的不同文件夹中装载同一个应用程序。Using
    as
    在这种情况下没有真正的意义,因为他不是在谈论前缀helpers-只是URL。它不仅前缀helpers,而且访问的URL具有
    prefex/namespace
    ;无论如何,如果他说这个答案不相关,那么我必须删除这个@max;因为首先根路径将生成
    /
    ,但是什么呢我希望is root\u path可以生成“/prefix\u 1”,而不是
    prefix\u root\u path
    我想他是想在web服务器上的不同文件夹中挂载同一个应用程序。在这种情况下,使用
    as
    并没有意义