2010-12-09 3 views
2

삭제 작업을 사용하여 삭제하려고합니다. 하지만 링크를 클릭 할 때마다 사용자 프로필로 이동합니다.레코드를 삭제할 수 없습니다. 사용자

사용자 컨트롤러

class UsersController < ApplicationController 

    filter_resource_access 

    # GET /users 
    # GET /users.xml 
    def index 
    @users = User.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @users } 
    end 
    end 

    # GET /users/1 
    # GET /users/1.xml 
    def show 
    #@user = User.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @user } 
    end 
    end 

    # GET /users/new 
    # GET /users/new.xml 
    def new 
    #@user = User.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @user } 
    end 
    end 

    # GET /users/1/edit 
    def edit 
    #@user = User.find(params[:id]) 
    end 

    def create 
    #@user = User.new(params[:user]) 
    @user.channels << Channel.find(1) 

    respond_to do |format| 
     if @user.save 
     format.html { redirect_to(:channels, :notice => 'Registration successfully.') } 
     format.xml { render :xml => @user, :status => :created, :location => @user } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @user.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    def profile 
    @user = User.find(params[:id]) 
    end 



    # PUT /users/1 
    # PUT /users/1.xml 
    def update 
    #@user = current_user 

    respond_to do |format| 
     if @user.update_attributes(params[:user]) 
     format.html { redirect_to(@user, :notice => 'User was successfully updated.') } 
     format.xml { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @user.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /users/1 
    # DELETE /users/1.xml 
    def destroy 
    @user = User.find(params[:id]) 
    @user.destroy 
    respond_to do |format| 
     format.html { redirect_to(users_url) } 
     format.xml { head :ok } 
    end 
    end 

    def delete 
    @user = User.find(params[:user_id]) 
    @user.destroy 
    redirect_to :users 
    end 

end 

인덱스 사용자보기

<h1>Listing users</h1> 
<p id="notice"><%= notice %></p> 
<table> 
    <tr> 
    <th>Username</th> 
    <th>First Name</th> 
    <th>Last Name</th> 
    <th>Telephone</th> 
    <th>Email</th> 
    <th></th> 
    <th></th> 
    <th></th> 
    </tr> 

<% @users.each do |user| %> 
    <tr> 
    <td><%= user.login %></td> 
    <td><%= user.first_name %></td> 
    <td><%= user.last_name %></td> 
    <td><%= telephone_field_tag :phone, user.telephone ,:disabled => true %></td> 
    <td><%= email_field_tag :email, user.email, :disabled => true %></td> 
    <td><%= link_to 'View Profile', user %></td> 
    <td><%= link_to 'Edit Profile', edit_user_path(user) if permitted_to? :update ,user %></td> 
    <%if permitted_to? :delete ,user %> 
    <td><%= link_to 'Close Account', user, :method => :delete, :confirm => "Are you sure?" %></td> 
    <% end %> 
    </tr> 
<% end %> 
</table> 

<br /> 

<%= link_to 'New User', new_user_path %> 
+0

고맙습니다. 나는 길을 따라 레일 3을 사용하고 있으며, 아마도 긴 밤이 될 것입니다. js 경험이 없습니다 –

답변

5

기회를 잘, 당신은 레일 (3)을 사용하고 있는지 좋다? 이것은 일반적인 문제입니다. 레일 2.x에서 link_to 도우미는 지저분한 인라인 자바 스크립트를 작성하여 적절한 delete 호출 (종류는 같지만이 설명을하기에 충분 함)과 함께 제출 된 양식을 작성하는 데 사용되었습니다.

그러나 레일즈 3에서는 실제로이 작업을 수행하는 javascript가 뷰 외부에서 javascript 파일로 이동되었습니다. 이것은 HTML 소스 코드가 문서 구조에 엄격히 종속되어 있고 문서 동작이 다른 곳에있는 "눈에 잘 띄지 않는"javascript로 알려져 있습니다.

<%= javascript_include_tag :all %> 

문제를 처리하도록 :

결론은 레이아웃이 너무 좋아 <head> 섹션에서 이러한 파일을 포함 할 필요가 있다는 것입니다.

+0

지금이 오류가 발생합니다. ActionController :: InvalidAuthenticityToken이 UsersController #에서 파기합니다. ActionController :: InvalidAuthenticityToken –

+0

레이아웃에 <% = crsf_meta_tag %>를 추가해야 할 수도 있습니다. 자세한 내용은 여기를 참조하십시오 : http://www.themodestrubyist.com/2010/02/24/rails-3-ujs-and-csrf-meta-tags/ – zetetic

+0

"csrf_meta_tags'' 즉 복수입니까? – Obromios

1

레일 3을 사용하는 경우 이전 링크가 삭제 된 것처럼 작동하지 않습니다.

지금은 모두 UJS입니다. 기본 스타일의 프로토 타입을 기반으로하는 모든 자바 스크립트를 포함 시키거나 jquery ones을 사용하는 것이 더 좋을 것입니다.

또한 레이아웃에 csrf_meta_tag이 있는지 확인하십시오. more...

+0

<% = link_to '계정 닫기', user.delete, : confirm => "정말입니까?" %> 그리고 내 데이터베이스의 모든 사용자를 삭제합니다. –

1

레일 3에서이 작업을 수행하려는 경우 read this SO question이어야합니다.

레일 2에서이 작업을 수행하려는 경우 일부 로그가 도움이 될 것입니다.