Работа на railstutorial.org Ch 10. Невозможно удалить пользователей через браузер как администратор - PullRequest
0 голосов
/ 20 ноября 2011

В главе 10 railstutorial.org я не могу удалить пользователей через браузер. Все тесты пройдены, включая тесты на удаление пользователей, но при попытке удалить пользователя в качестве администратора через браузер, указывающий на 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 удалит пользователя, но не подтвердит действие.

РЕДАКТИРОВАТЬ: Добавление маршрутов.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

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

Начиная с Rails 3.1, вам нужно использовать application, а не defaults или all, в противном случае ваш файл манифеста application.js никогда не будет загружен, что означает, что jQuery никогда не будет загружен.

<%= javascript_include_tag :application %>
0 голосов
/ 23 ноября 2011

Убедитесь, что в вашем шаблоне есть следующее:

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

Подробнее об этом здесь :

...