Éviter la dupplication de code

Éviter la dupplication de code - Ruby/Rails - Programmation

Marsh Posté le 13-09-2007 à 11:56:40    

Bonjour,
J'essaie de créer une zone d'administration du même gout que celle proposée par le plugin auto-admin (http://code.trebex.net/auto-admin/, ce dernier me plaisant peu de part la phrase de son créateur : This is not a view generator for you to then customise. Either it provides the interface you want, or it doesn't.)
J'aimerais, tout comme dans ce plugin, pouvoir gérer les entrées dans ma base de données d'une manière à peu près identique quelque soit le modèle.
En ce moment j'y arrive en passant par plusieurs contrôleurs (un par modèle en fait) mais j'aimerais pouvoir les rassembler en un seul contrôleur d'administration. Les méthodes utilisées par mes contrôleurs se ressemblent beaucoup, j'ai donc créé une hiérarchie de modules que je load. J'aurais aimé faire quelque chose style :
 

Code :
  1. class AdministrationController < ApplicationController
  2.   case params[:module]
  3.   when "user"
  4.     include UserController
  5.   when "role"
  6.     include RoleController
  7.   end


 
Et ainsi de suite, malheureusement je constate que params n'est pas excessible dans le corps de la classe.
Comment puis-je faire?
 
Merci


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 13-09-2007 à 11:56:40   

Reply

Marsh Posté le 14-09-2007 à 17:49:49    

personne?

Reply

Marsh Posté le 14-09-2007 à 22:26:36    

J'avoue que j'ai un peu de mal à comprendre ce que tu veux faire donc je risque de répondre à coté de la plaque.
 
Pourquoi tu fais pas simplement ton AdministrationController qui hérite de ApplicationController, et ensuite tu fais hériter chaque controlleur de ton interface admin de AdministrationController et tu inclus ton module dedans.

Reply

Marsh Posté le 15-09-2007 à 12:30:46    

Bonjour,

 

J'ai trouvé comment faire mon bonheur ... Je suis pas sur d'avoir exactement compris ce que tu me proposes Le Phasme, mais est-ce que le résultat serait le même? Parce que là ça a beau marcher comme je le veux, ça me parait quand même être de la grosse bidouillle ... Donc si on me propose mieux je prend :D

 
Code :
  1. require 'shared/user_controller'
  2. require 'shared/role_controller'
  3. # Add here other controllers
  4. class AdministrationController < ApplicationController
  5.   before_filter :login_required
  6.   access_control :DEFAULT=>'admin'
  7.  
  8.   # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
  9.   verify :method => :post, :only => [ :destroy, :create, :update ],
  10.   :redirect_to => { :action => :list }
  11.  
  12.  
  13.   def loadRightController
  14.    case params[:module]
  15.     when 'user'
  16.       self.extend UserController
  17.     when 'role'
  18.       self.extend AbonnementController
  19.     else
  20.       redirect_to :action=>:index
  21.       return
  22.     end
  23.     eval("self."<<params[:todo])
  24.   end
  25. end
 

Et ensuite j'ai rajouté une route :

 
Code :
  1. map.connect 'administration/:module/:todo/:id', :controller => 'administration',
  2.   :action => 'loadRightController',
  3.   :defaults => {
  4.     :todo=>'index'
  5.   }
 

Edit: Bien entendu là c'est pas une solution "finie", genre il faut que je securise les différents params parce que là c'est assez une invitation à se faire démolire


Message édité par esox_ch le 15-09-2007 à 12:32:18

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed