Ruby on rails 我如何破解url帮助器/路由帮助器,使所有路径都添加前缀
我希望所有生成的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
/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
由于内置Railsrelative\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服务器的不同文件夹中装载同一个应用程序。Usingas
在这种情况下没有真正的意义,因为他不是在谈论前缀helpers-只是URL。它不仅前缀helpers,而且访问的URL具有prefex/namespace
;无论如何,如果他说这个答案不相关,那么我必须删除这个@max;因为首先根路径将生成/
,但是什么呢我希望is root\u path可以生成“/prefix\u 1”,而不是prefix\u root\u path
我想他是想在web服务器上的不同文件夹中挂载同一个应用程序。在这种情况下,使用as
并没有意义