2013-04-29 6 views
11

मेरे आवेदन के लिए, मेरे पास उपयोगकर्ता खाते हैं जो लोग साइन अप कर सकते हैं। मैं सेटअप के लिए devise मणि का उपयोग करता हूं।रेल - देवताओं के तहत बनाए गए उपयोगकर्ताओं को कैसे नष्ट करें?

मेरे पास एक उपयोगकर्ता पृष्ठ भी है जो destroy लिंक के साथ साइट पर पंजीकृत सभी उपयोगकर्ताओं को सूचीबद्ध करता है। मैं चाहता हूं कि मेरा व्यवस्थापक उपयोगकर्ताओं को हटाने में सक्षम हो और इसे इस पृष्ठ सूची पृष्ठ पर रीडायरेक्ट कर दे। लेकिन जब मैं किसी विशिष्ट उपयोगकर्ता को नष्ट करने के लिए लिंक पर क्लिक करता हूं, तो यह केवल उपयोगकर्ता प्रोफ़ाइल पेज पर रीडायरेक्ट करता है और उपयोगकर्ता को डेटाबेस से हटा नहीं देता है।

क्या किसी को पता है क्यों?

** अद्यतन: अनुशंसित कोड के रूप में नीचे अपडेट किया गया कोड और अब काम करता है।

users_controller.rb

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

    if @user.destroy 
     redirect_to root_url, notice: "User deleted." 
    end 
    end 

उपयोगकर्ताओं/index.html.erb

<div class = "container"> 
    <div id="usersview"> 
    <b>USERS DIRECTORY</b> 
    <%= render @users %> 
</div> 

<center> 
    <%= will_paginate @users %> 
</center> 
</div> 

उपयोगकर्ताओं/_user.html.erb

<div class="comments"> 
    <%= link_to user.name, user %> 
    <% if current_user.try(:admin?) && !current_user?(user) %> 
     <%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" } %> 
    <% end %> 
</div> 

routes.rb

devise_for :users  
match 'users/:id' => 'users#destroy', :via => :delete, :as => :admin_destroy_user 
match 'users/:id' => 'users#show', as: :user 
resources :users 

उत्तर

10

डेविस इस कार्यक्षमता को बॉक्स के बाहर प्रदान नहीं करता है। आपने अपनी खुद की नष्ट कर दी है, लेकिन आपको उस क्रिया के लिए एक कस्टम मार्ग भी बनाना होगा।

अपने मार्गों में:

match 'users/:id' => 'users#destroy', :via => :delete, :as => :admin_destroy_user 

और फिर जब लिंक बनाने:

<%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" } %> 
+0

मैंने अपडेट किया (प्रश्न संपादित देखें) जैसा कि आपने नोट किया लेकिन एक ही परिणाम।पृष्ठ को दिखाने के लिए नष्ट नहीं कर रहे हैं और मार्ग। क्या यह संभव है कि मेरे मार्ग सही क्रम में नहीं हैं? – spl

+0

'devise_for' कॉल के ऊपर कस्टम मार्ग रखने का प्रयास करें। – AlexBrand

+0

मुझे नहीं लगता कि आपको 'संसाधनों की आवश्यकता है: उपयोगकर्ता' – AlexBrand

3

मुझे लगता है कि आप अपने routes.rb में है: resources :users

समस्या यह है कि आप कर रहे हैं उस उपयोगकर्ता को गुजरना नहीं जिसे आप हटाना चाहते हैं:

उपयोगकर्ता/_user.html.erb

<%= link_to "Destroy", user, method: :delete, data: { confirm: "You sure?" } %> 

देखें कि दूसरे परम में मैं बजाय उपयोगकर्ता जोड़ा USER_URL की।

users_controller.rb

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

    if @user.destroy 
     redirect_to root_url, notice: "User deleted." 
    end 
    end 

नियंत्रक में मैं एक @ user.destroy हटा दिया। आप इसे दो बार बुला रहे थे।

उम्मीद है कि यह मदद करता है!

0

या रेल से सी आप ऐसा कुछ कर सकते हैं जहां "x" उपयोगकर्ता आईडी है।

user = User.where(id: x) 
user.destroy(1) 
2

तैयार करने के अनुसार 4.1 रेक मार्ग और विचार, निम्नलिखित का उपयोग करके उपयोगकर्ता को एक बार लॉग इन करने में आपकी सहायता करेगा।

<%= link_to "Cancel my account", registration_path(current_user), data: { confirm: "Are you sure?" }, method: :delete %> 
संबंधित मुद्दे