ruby-on-rails 在Rails中删除URL的一部分

yjghlzjz  于 2023-11-20  发布在  Ruby
关注(0)|答案(2)|浏览(102)

我有一个设置,我将所有对/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;
    }


它可以工作,但是你可以清楚地看到同样的代码写了两次,我想知道是否有一个更合适的方法来做到这一点。

piok6c0g

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'选项为这个作用域分配了一个名称,使路径更具可读性。

ee7vknir

ee7vknir2#

你可以定义一个helper方法:

Rails.application.routes.draw do
  def uploadable
    # yield first outside the scope so that your helper methods
    # generate urls without "/upload" prefix (since you don't want it anyway)
    yield
    scope "upload" do
      yield
    end
  end

  uploadable do
    resources :articles do
      resources :comments
    end
  end
end

字符串
您也可以尝试将“上传”部分设置为可选:

Rails.application.routes.draw do
  scope "(/upload)" do
    resources :articles do
      resources :comments
    end
  end
end

相关问题