我使用resources :users
创建了一个包含路径的用户模型,但无法通过链接显示各个用户个人资料。下面的索引页面显示列表中的所有用户:
用户/ index.html.erb
<% provide(:title, 'All drivers') %>
<h1>All drivers</h1>
<ul class="center hero-unit col-md-6 col-md-offset-3 users">
<% @users.each do |user| %>
<div class="user-name">
<li><%= link_to user.name, user %></li>
</div>
<% end %>
</ul>
但是当我点击索引页面上的用户(比如用户3)时,它会将我发送到/ users / 3。这个页面给了我这个错误:
No route matches {:action=>"edit", :controller=>"users", :id=>nil} missing required keys: [:id]
但链接转到/ users / 3并传递参数{“id”=&gt;“3”}。那么id怎么可以为零呢?我不明白如何让这些链接正常工作。
users.controller.rb
class UsersController < ApplicationController
#add before action for index
before_action :correct_user, only: [:edit, :update]
def index
@users = User.all
end
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
log_in @user
flash[:success] = "Thank you for signing up, welcome to ensage!"
redirect_to root_path
else
render 'new'
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :phone, :password,
:password_confirmation)
end
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end
end
的routes.rb
Rails.application.routes.draw do
get 'shop_sessions/new'
get 'shops/new'
get 'cars/new'
get 'sessions/new'
get 'users/new'
root 'static_pages#home'
get 'shophome' => 'static_pages#shop_home', as:"shop_home"
get 'shop', to: 'static_pages#shop_home', as: 'shop_root'
get 'shops', to: 'shops#index', as: 'shop_index'
get 'help' => 'static_pages#help'
get 'about' => 'static_pages#about'
get 'contact' => 'static_pages#contact'
get 'signup' => 'users#new'
get 'shopsignup' => 'shops#new'
get 'login' => 'sessions#new'
post 'login' => 'sessions#create'
get 'shoplogin' => 'shop_sessions#new', as: 'shop_login'
post 'shoplogin' => 'shop_sessions#create'
delete 'logout' => 'sessions#destroy'
delete 'shoplogout' => 'shop_sessions#destroy', as: 'shop_logout'
resources :users
resources :shops
resources :cars, only: [:create, :destroy, :edit]
end
用户/ show.html.erb
<div class="row">
<aside class="col-md-4">
<section class="user_info">
<h1>
<%= @user.name %>
</h1>
</section>
</aside>
<div class="col-md-8">
<% if @user.cars.any? %>
<h3>Cars (<%= @user.cars.count %>)</h3>
<ol class="cars">
<%= render @cars %>
</ol>
<% end %>
</div>
</div>
佣金路线
Prefix Verb URI Pattern Controller#Action
shop_sessions_new GET /shop_sessions/new(.:format) shop_sessions#new
shops_new GET /shops/new(.:format) shops#new
cars_new GET /cars/new(.:format) cars#new
sessions_new GET /sessions/new(.:format) sessions#new
users_new GET /users/new(.:format) users#new
root GET / static_pages#home
shop_home GET /shophome(.:format) static_pages#shop_home
shop_root GET /shop(.:format) static_pages#shop_home
shop_index GET /shops(.:format) shops#index
help GET /help(.:format) static_pages#help
about GET /about(.:format) static_pages#about
contact GET /contact(.:format) static_pages#contact
signup GET /signup(.:format) users#new
shopsignup GET /shopsignup(.:format) shops#new
login GET /login(.:format) sessions#new
POST /login(.:format) sessions#create
shop_login GET /shoplogin(.:format) shop_sessions#new
shoplogin POST /shoplogin(.:format) shop_sessions#create
logout DELETE /logout(.:format) sessions#destroy
shop_logout DELETE /shoplogout(.:format) shop_sessions#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
shops GET /shops(.:format) shops#index
POST /shops(.:format) shops#create
new_shop GET /shops/new(.:format) shops#new
edit_shop GET /shops/:id/edit(.:format) shops#edit
shop GET /shops/:id(.:format) shops#show
PATCH /shops/:id(.:format) shops#update
PUT /shops/:id(.:format) shops#update
DELETE /shops/:id(.:format) shops#destroy
cars POST /cars(.:format) cars#create
edit_car GET /cars/:id/edit(.:format) cars#edit
car DELETE /cars/:id(.:format) cars#destroy