Fondamentalement, je veux implémenter une extension Rails simple pour définir la gravité des méthodes dans mon contrôleur afin que je puisse en restreindre l'utilisation de façon appropriée. Par exemple, je voudrais définir les actions reposant par défaut comme si dans un résumé superclasse:Ruby on Rails pour définir les paramètres par défaut des classes et autoriser un remplacement des sous-classes
view_methods :index, :show
edit_methods :new, :create, :edit, :update
destroy_methods :destroy
Je puis dans un appel de commande non abstraite:
edit_methods :sort
à ajouter dans la méthode de tri sur ce contrôleur particulier comme étant une méthode de niveau d'édition.
Je pourrais alors utiliser un before_filter pour vérifier le niveau de l'action en cours d'exécution, et l'abandonner si ma logique détermine que l'utilisateur actuel ne peut pas le faire.
Le problème, c'est que j'ai de la difficulté à déterminer comment mettre en place ce type de structure. J'ai essayé quelque chose comme ça jusqu'à présent:
class ApplicationController
@@view_methods = Array.new
@@edit_methods = Array.new
@@destroy_methods = Array.new
def self.view_methods(*view_methods)
class_variable_set(:@@view_methods, class_variable_get(:@@view_methods) << view_methods.to_a)
end
def self.edit_methods(*edit_methods)
class_variable_set(:@@edit_methods, self.class_variable_get(:@@edit_methods) << edit_methods.to_a)
end
def self.destroy_methods(*destroy_methods)
@@destroy_methods << destroy_methods.to_a
end
def self.testing
return @@edit_methods
end
view_methods :index, :show
edit_methods :new, :create, :edit, :update
destroy_methods :destroy
end
Les trois méthodes ci-dessus sont différents sur le but, juste pour vous montrer ce que je l'ai essayé. Le troisième fonctionne, mais renvoie les mêmes résultats, peu importe le contrôleur que je teste. Probablement parce que les variables de classe sont stockées dans le contrôleur d'application donc sont modifiées globalement.
Toute aide serait grandement appréciée.
Wow! C'est exactement ce que je cherchais. Merci beaucoup pour cette information. J'espère que cela aide les autres aussi. C'est difficile à chercher, je suis content que vous y ayez répondu :) –