Rails Ruby 中的路线冲突
Routes conflict in Ruby on Rails
我正在使用 Devise gem 并为用户创建了一个 show
页面。我的想法是创建一个像 www.website.com/:id
这样的简单路径,我将其配置如下所示:
devise_for :users, path: '', path_names: {sing_in: "login", sing_out:
"signout", sing_up: "signup", edit: "edit"},
:controllers => {:registrations => :registrations }
resources :users, only: [:show]
get '/:id' => 'users#show', as: :profile
我的路线工作正常,但除了 show
页面外,我在 static controller
下还有页面,例如 about
页面。我希望能够像 www.website.com/about
一样访问它,这是我定义 static routes
:
的方式
get '/about', to: 'static#about'
现在,如果我尝试重定向到 about page
,我收到一个错误:
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User with 'id'=about
这是我的 users_controller.rb
:
class UsersController < ApplicationController
def show
@user = User.find_by_id(params[:id])
@services = @user.services
end
...
end
我试图搜索类似的错误,但没有找到类似的错误。有人可以告诉我我做错了什么吗?
感谢您的帮助和时间。
这里有两件事:
- 路由不知道参数类型
- 路由从上到下匹配
在这种情况下,我怀疑您的单层路线被定义为您的 get '/:id'
路线。因此,该路由正在捕获所有 /anything
的请求,因为路由器认为 anything
是一个参数。
只需将您的路线定义移动到任何其他 /about
等路线下方,以便它们首先匹配。
像这样:
get '/about', to: 'static#about'
get '/:id' => 'users#show', as: :profile
我正在使用 Devise gem 并为用户创建了一个 show
页面。我的想法是创建一个像 www.website.com/:id
这样的简单路径,我将其配置如下所示:
devise_for :users, path: '', path_names: {sing_in: "login", sing_out:
"signout", sing_up: "signup", edit: "edit"},
:controllers => {:registrations => :registrations }
resources :users, only: [:show]
get '/:id' => 'users#show', as: :profile
我的路线工作正常,但除了 show
页面外,我在 static controller
下还有页面,例如 about
页面。我希望能够像 www.website.com/about
一样访问它,这是我定义 static routes
:
get '/about', to: 'static#about'
现在,如果我尝试重定向到 about page
,我收到一个错误:
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User with 'id'=about
这是我的 users_controller.rb
:
class UsersController < ApplicationController
def show
@user = User.find_by_id(params[:id])
@services = @user.services
end
...
end
我试图搜索类似的错误,但没有找到类似的错误。有人可以告诉我我做错了什么吗?
感谢您的帮助和时间。
这里有两件事:
- 路由不知道参数类型
- 路由从上到下匹配
在这种情况下,我怀疑您的单层路线被定义为您的 get '/:id'
路线。因此,该路由正在捕获所有 /anything
的请求,因为路由器认为 anything
是一个参数。
只需将您的路线定义移动到任何其他 /about
等路线下方,以便它们首先匹配。
像这样:
get '/about', to: 'static#about'
get '/:id' => 'users#show', as: :profile