在 railstutorial.org 的第 10 章,我无法通过浏览器删除用户。所有测试都通过了,包括用户删除测试,但是当试图通过指向 localhost:3000 的浏览器以管理员身份删除用户时,我只是被定向到用户的个人资料。
<%= link_to "delete", user, :method => :delete, :confirm => "Are you sure?", :title => "Delete #{user.name}" %>
是用于生成删除链接的代码。
<%= javascript_include_tag :defaults %>
已包含在标题中。
我真的很困惑为什么会这样。服务器的日志显示了对用户信息的 GET 请求,正如人们在被定向到用户页面而不是破坏用户时所期望的那样。
此外,使用button_to
而不是link_to
将删除用户,但不会确认操作。
编辑:按请求添加 routes.rb
resources :sessions, :only => [:new, :create, :destroy]
resources :users
match '/contact', :to => 'pages#contact'
match '/about', :to => 'pages#about'
match '/help', :to => 'pages#help'
match '/signup', :to => 'users#new'
match '/signin', :to => 'sessions#new'
match '/signout', :to => 'sessions#destroy'
root :to => 'pages#home'
get "pages/home"
get "pages/contact"
get "pages/about"
get "pages/help"
编辑:application.js 按请求添加
require jquery
require jquery_ujs
require_tree .
编辑:按请求添加的 users_controller.rb
class UsersController < ApplicationController
before_filter :authenticate, :only => [:index, :edit, :update, :destroy]
before_filter :correct_user, :only => [:edit, :update]
before_filter :admin_user, :only => :destroy
def show
@user = User.find(params[:id])
@title = @user.name
end
def new
@user = User.new
@title = "Sign Up"
end
def create
@user = User.new(params[:user])
UserMailer.pw_email(@user).deliver
if @user.save
sign_in @user
flash[:success] = "Welcome to Sample App!"
redirect_to @user
else
@title = "Sign Up"
render 'new'
end
end
def edit
@title = "Edit User"
end
def update
if @user.update_attributes(params[:user])
flash[:success] = "Profile Updated"
redirect_to @user
else
@title = "Edit User"
render 'edit'
end
end
def index
@title = "All Users"
@users = User.paginate(:page => params[:page])
end
def show
@user = User.find(params[:id])
@title = @user.name
end
def destroy
User.find(params[:id]).destroy
flash[:success] = "User destroyed"
redirect_to users_path
end
private
def authenticate
deny_access unless signed_in?
end
def correct_user
@user = User.find(params[:id])
redirect_to(root_path) unless current_user?(@user)
end
def admin_user
redirect_to(root_path) unless current_user.admin?
end
end