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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs