Je semble avoir un hiccup d'autorisation dans mon application Ruby on Rails. J'ai utilisé la méthode suivante dans mon contrôleur d'application et il a fonctionné magnifiquement.Comment gérer un hiccup d'autorisation en raison d'un mauvais nom de contrôleur?
def require_owner
obj = instance_variable_get("@#{controller_name.singularize.camelize.underscore}") # LineItem becomes @line_item
return true if current_user_is_owner?(obj)
render_error_message("You must be the #{controller_name.singularize.camelize} owner to access this page", root_url)
return false
end
Je puis filtre dans les contrôleurs spécifiques par:
before_filter :require_owner, :only => [:destroy, :update, :edit]
J'ai récemment créé un nouveau contrôleur qui a un peu d'une convention d'appellation qui semble causer un problème. Normalement mes contrôleurs ont lu messages_controller
ou posts_controller
. Dans ce cas précis, j'ai nommé la ressource box_wod
qui a généré box_wods_controller
.
Ceci est le seul contrôleur qui semble avoir un problème avec ce filtre, donc je parie que je peux dire qu'il est dans le nommage et donc la méthode application_controller
ne reconnaît pas le propriétaire de l'enregistrement.
Je ne reçois pas un message d'erreur mais l'application ne me laisse pas modifier, mettre à jour ou détruire un enregistrement parce que je ne suis pas le BoxWod owner
. Mes itinéraires sont corrects, tout comme mes associations et les informations correctes sont transmises à la table box_wod
.
Existe-t-il un moyen de réécrire la méthode application_controller
pour reconnaître le trait de soulignement supplémentaire dans la ressource box_wod
? Ou est-ce même mon problème?
MISE À JOUR:
Voici les trois méthodes du BoxWodsController:
def edit
@workout_count = Workout.count
@box_wod = BoxWod.find(params[:id])
end
def update
@box_wod = BoxWod.find(params[:id])
respond_to do |format|
if @box_wod.update_attributes(params[:box_wod])
flash[:notice] = 'BoxWod was successfully updated.'
format.html { redirect_to(@box_wod) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @box_wod.errors, :status => :unprocessable_entity }
end
end
end
def destroy
@box_wod = BoxWod.find(params[:id])
@box_wod.destroy
respond_to do |format|
format.html { redirect_to(box_wods_url) }
format.js
end
end
J'ai du mal à avaler que c'est le nom du fichier du contrôleur qui vous cause un problème. Pouvez-vous ajouter les parties pertinentes du contrôleur en question à votre question? – karmajunkie