我有一个设置,我将所有对/upload/* 的请求路由到Rails。以博客为例,我希望Rails将somedomain.com/upload/article/new
视为somedomain.com/article/new
。我最终得到了以下结果。
routes.rb
Rails.application.routes.draw do
root "articles#index"
scope 'upload' do
resources :articles do
resources :comments
end
end
resources :articles do
resources :comments
end
end
字符串
nginx.conf
location /upload/ {
proxy_pass http://localhost:3000/;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
}
型
它可以工作,但是你可以清楚地看到同样的代码写了两次,我想知道是否有一个更合适的方法来做到这一点。
2条答案
按热度按时间piok6c0g1#
Rails.application.routes.draw do root“articles#index”
资源:文章做资源:评论结束
作用域'upload',控制器:'articles',as:'upload' do resources:articles,path:'' do resources:comments end end end end
我删除了重复的资源:articles do. end block在'upload'范围之外。
在“upload”范围内,我使用控制器选项来指定请求应该由“articles”控制器处理。
我使用as:'upload'选项为这个作用域分配了一个名称,使路径更具可读性。
ee7vknir2#
你可以定义一个helper方法:
字符串
您也可以尝试将“上传”部分设置为可选:
型