0

在 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
4

2 回答 2

2

从 Rails 3.1 开始,您需要使用application, not defaultsor all,否则您的application.js清单文件永远不会被加载,这意味着 jQuery 永远不会被加载。

<%= javascript_include_tag :application %>
于 2011-11-20T00:41:08.887 回答
0

确保您的模板中有以下内容:

# note that this is plural
<%= csrf_meta_tags %>

在此处阅读更多信息:

于 2011-11-22T22:02:45.450 回答