Liens polymorphiques multiples avec conditions

Ca faisait longtemps que j’avais pas trouvé une question tordue à poser,
en
voici une pour les amateurs :

Dans un contexte REST, j’ai un modèle Person :

class Person < AR::B

belongs_to :personable, :polymorphic => true

end

Un des éléments auxquels il s’attache est Lender, avec plusieurs
attachements polymorphiques :
class Lender < AR::B

with_scope(:has_one => {:as => :personable, :dependent => :destroy})
do
has_one :lender, :conditions => “personable_role = ‘lender’”
has_one :manager, :conditions => “personable_role = ‘manager’”
has_one :governor, :conditions => “personable_role = ‘governor’”
has_one :coordinator, :conditions => “personable_role =
‘coordinator’”
end

end

Et je veux pouvoir faire des belles requêtes REST du style :
GET /lenders/1/lenders/1
POST /lenders/1/governor
etc.

L’idéal niveau simplicité serait de faire en sorte d’exploiter le
PeopleController pour effectuer les actions correspondantes en ayant le
paramètre “personable_role” ajouté en plus. Par exemple :
GET /lenders/1/managers/new => {:controller => :people, :action => :new,
:personable_role => :manager}

J’ai trouvé ça qui fait presque ce que j’aimerai :
[config/routes.rb]

map.resources :lenders do |lenders|
lenders.resources :people, :as => :lenders
lenders.resources :people, :as => :managers
lenders.resources :people, :as => :governors
lenders.resources :people, :as => :coordinators
end

Sauf que là , il n’y a pas de paramètre “personable_role” (ou paramètre
équivalent) à ma connaissance.

Est-ce que quelqu’un à une idée de comment faire cette acrobatie le plus
proprement possible ?


Michel B.

Salut Michel,

à moins d’avoir mal compris ta question… si tu prends le dernier
exemple où plusieurs routes tapent dans le même contrôleur, pourquoi
n’utiliserais-tu pas un before_filter qui te récupérerais ton
paramètre personal_role directement en analysant request_uri (ou
équivalant) ?

Nicolas.

Michel B. a écrit :

Mon problème venait de ne pas savoir comment passer ce paramètre.

Mais j’ai fini par bricoler un truc dont je suis suffisement content
pour
l’instant :

class PeopleController < AC

helper_method :role

def role
request.request_uri[/lender|manager|governor|coordinator/]
end

end

Pas vraiment besoin de before_filter, c’est accessible de la vue et ça
permet de préparer mes objets pour les sauvegardes.

Merci pour l’idée ceci dit.