获取错误找不到'id'= id的用户

时间:2016-01-20 21:38:56

标签: ruby-on-rails ruby-on-rails-4 devise

我正在通过制作项目网络应用程序来学习ruby on rails 无论何时我去

<%= link_to 'My Profile', user_path(:id) %>
错误
Couldn't find User with 'id'=id" is shown...and url is "http://localhost:3000/users/id
如果我将以上链接转换为
<%= link_to 'My Profile', user_path %>
,它可以正常工作,但现在除了用户的显示页面之外的所有其他页面都会出现错误
No route matches {:action=>"show", :controller=>"users"} missing required keys: [:id]
....我似乎无法在任何地方找到任何解决方案......

这是我的配置:
佣金路线

                  Prefix Verb   URI Pattern                       Controller#Action
                    root GET    /                                 static#landing
        new_user_session GET    /users/sign_in(.:format)          devise/sessions#new
            user_session POST   /users/sign_in(.:format)          devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)         devise/sessions#destroy
           user_password POST   /users/password(.:format)         devise/passwords#create
       new_user_password GET    /users/password/new(.:format)     devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)    devise/passwords#edit
                         PATCH  /users/password(.:format)         devise/passwords#update
                         PUT    /users/password(.:format)         devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)           devise/registrations#cancel
       user_registration POST   /users(.:format)                  devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)          devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)             devise/registrations#edit
                         PATCH  /users(.:format)                  devise/registrations#update
                         PUT    /users(.:format)                  devise/registrations#update
                         DELETE /users(.:format)                  devise/registrations#destroy
       user_confirmation POST   /users/confirmation(.:format)     devise/confirmations#create
   new_user_confirmation GET    /users/confirmation/new(.:format) devise/confirmations#new
                         GET    /users/confirmation(.:format)     devise/confirmations#show
                    user GET    /users/:id(.:format)              users#show

_header.html.erb <%= link_to 'My Profile', user_path %>

users_controller.rb class UsersController < ApplicationController def show @user = User.find(params[:id]) end end

的routes.rb   Rails.application.routes.draw do root 'static#landing' devise_for :users resources :users, :only => [:show]

2 个答案:

答案 0 :(得分:2)

你需要将用户的id传递给user_path,而不是符号:id - 所以类似

FALSE

如果要链接的用户位于实例变量中 - 或者因为您使用的是Devise并且它提供了您可能需要的current_user帮助程序

<%= link_to 'My Profile', user_path(@current_user.id) %>

答案 1 :(得分:0)

我认为首先出错的是:

<%= link_to 'My Profile', user_path(:id) %>

您使用的是符号,而不是变量

<%= link_to 'My Profile', user_path(@id) %>

假设您已在控制器中设置了@id,那么会有一个实际变量。

但是,通常情况下,您不会在路径中设置用户的ID - 这是某人只需手动更改号码并查看其他人的信息。

让我们假设你设置了一个名为:user_id的会话变量,然后你应该做一些添加收集路由的事情 - 所以没有发送id。

 resources :users do 
     get :show_profile, on: :collection
 end

这将为您提供show_profile操作的路径,使用

调用
link_to 'My Profile', show_profile_user_path

然后在您的控制器中让您的用户从会话中查找 - 如下所示:

 @user = User.find_by id: session[:user_id]

我不知道设计是如何做到的,但请不要相信用户不要弄乱你的参数!