我在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
答案 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#index
和users#index
都指向localhost:3000/
在不知道您的应用程序的情况下,解决此方案的选项可能是将landing#index
作为gustes(未经过身份验证的用户)的根目录,将users#index
作为经过身份验证的用户的根目录。