我正在通过制作项目网络应用程序来学习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]
答案 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]
我不知道设计是如何做到的,但请不要相信用户不要弄乱你的参数!