Ant*_*yev 4 routes ruby-on-rails devise ruby-on-rails-5.1
我正在与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
Run Code Online (Sandbox Code Playgroud)
我的路线工作正常,但除了show页面之外,我还有页面static controller,例如about页面。我希望能够像访问它一样访问它www.website.com/about,这是我定义我的方式static routes:
get '/about', to: 'static#about'
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试重定向到about page,则会收到错误消息:
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User with 'id'=about
Run Code Online (Sandbox Code Playgroud)
这是我的users_controller.rb:
class UsersController < ApplicationController
def show
@user = User.find_by_id(params[:id])
@services = @user.services
end
...
end
Run Code Online (Sandbox Code Playgroud)
我试图搜索类似的错误,但没有找到类似的错误。有人可以告诉我我做错了什么吗?
感谢您的帮助和时间。
这里有两件事:
在这种情况下,我怀疑您的单级路线正在定义您的get '/:id'路线。因此,该路由正在捕获所有/anything因为路由器认为anything是参数的请求。
只需将您的路线定义移动到任何其他/about等路线下方,以便它们首先匹配。
像这样:
get '/about', to: 'static#about'
get '/:id' => 'users#show', as: :profile
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
447 次 |
| 最近记录: |