将路线映射到Rails中的其他路线

时间:2018-05-14 16:25:57

标签: ruby-on-rails routes

我在Ruby on Rails v5.2.0中遇到了routes的麻烦

目前,我有一个名为users资源,因此每当我启动时,我都会有一个控制器来执行操作(例如index)在端口3000上的localhost中输入服务器并输入我的浏览器

localhost:3000/users/

是否有一种简单的方法可以将此资源的请求映射到app root?

基本上,我正在尝试实现此目的:
localhost:3000/users/ - > localhost:3000/
localhost:3000/users/new/ - > localhost:3000/new/


这就是我的routes.rb文件现在的样子:

Rails.application.routes.draw do
    devise_for :users
    get 'landing/index'
    get 'welcome/index'

    resources :users

    root to: 'landing#index'
end

3 个答案:

答案 0 :(得分:1)

将以下行添加到routes.rb文件

更改

root to: 'landing#index'

root "users#index"`

并添加行

get "/new" => "users#new"

此外,如果您想了解有关路由的更多信息,请点击此链接 http://guides.rubyonrails.org/routing.html

答案 1 :(得分:1)

TLDR - Rails没有用于路由的root模型生成器

您可以手动创建个人路线

get :new, to: "users#new", as: "new_user"
...

然而,在使用rails生成器resources时,您只需指定

的简写
scope :model do
    get :new, to: "model#new", as: "new_model"
    ...
end

您可以查看路线指南以了解有关显式创建的更多细节 http://guides.rubyonrails.org/routing.html

HACKY SOLUTION

root to: "users#index", as: "users"
get :new, to: "users#new", as: "new_user"
post "/", to: "users#create"
scope ":id" do
    root to: "users#show"
    get :edit, to: "users#edit", as: "edit_user"
    patch "/", to: "users#update"
    ...
end

答案 2 :(得分:1)

看起来你想要的是“静音”。来自网址的users。对此选项是path: '' users,如下所示:

Rails.application.routes.draw do
  devise_for :users
  get 'landing/index'
  get 'welcome/index'

  resources :users, path: '' # <-- HERE

  root to: 'landing#index'
end
  

您为path:提供的值将替换资源名称。   
  在这种情况下,users将替换为空字符串'',但它可以是任何其他字符串。

这将删除users。但是,您必须考虑root to: 'landing#indexusers#index都指向localhost:3000/

在不知道您的应用程序的情况下,解决此方案的选项可能是将landing#index作为gustes(未经过身份验证的用户)的根目录,将users#index作为经过身份验证的用户的根目录。