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.