2013-05-11 3 views
0

Je suis en train d'interdire un utilisateur, mais il ne fonctionne pas comme prévu, probablement parce que je n'ai aucune idée ce que je fais:Rails: fonctionnalité utilisateur interdiction construit sur mesure ne fonctionne pas

Routes: 

     resources :users do 
     collection do 
      post 'ban' 
     end 
     end 


class UsersController < ApplicationController 

    def ban 
    @user = User.find(params[:id]) 
    if current_user.admin? 
     @user.banned = true 
     @user.avatar = nil unless @user.avatar.nil? 
     @user.banned_by = current_user.full_name 
     @user.profile = nil unless @user.profile.nil? 
     @user.save 
     redirect_to current_user, notice: "User has been banned." 
    end 
    end 
end 

À mon avis:

<%= link_to "Ban User", ban_users_path(:id => @user.id), :method=>:post %> 

Pour une raison quelconque, il passe le paramètre "ban" et dit ne peut pas trouver l'utilisateur.

Répondre

1

Vos itinéraires doivent être

resources :users do 
    member do 
    post 'ban' 
    end 
end 

routes membres agissent sur un membre, de sorte que votre demande ressemblerait POST /users/1/ban (utilisateur # 1 étant le membre). Les routes de collection doivent agir sur l'intégralité de la collection, c'est-à-dire POST /users/ban. Votre aide devrait se transformer en ban_user_path(@user)

Aussi, je ne pense pas que vous ayez besoin de vérifier si leur avatar/profil est nul avant de les mettre à zéro. Il suffit de les mettre à zéro, il n'y a pas besoin de vérifier. Si elles sont déjà nulles, il n'y a pas de mal à les remettre à zéro.

+0

Genius ........! – pratski

Questions connexes