Je bosse en ce moment avec ActiveResource et celui ci me donne du fil
à retordre.
J'ai deux models coté "serveur"

Songs: belong_to :artist et Artist: has_many :songs

J'ai également deux méthodes de controller :
une méthode songs dans ArtistsController qui me retourne un XML des
songs de l'Artist
et
une méthode list_by_artist dans SongsController qui me retourne les
songs d'un Artist

Tout cela est RESTFUL
  map.resources :artists, :member => {:songs => :get}
  map.resources :songs, :collection => {:list_by_artist => :get}

J'ai bien conscience que ces deux méthodes font la même chose mais :

Je voudrais côté client (ActiveResource) récupérer la liste des songs
d'un artist comme des objets Songs (pas des Array)

Je peux écrire :
Artist.find(1).get(:songs) pour récupérer un Array
mais
Artist.find(1).find(:songs) me renvoie une NoMethodError pour la
méthode find

Je peut aussi faire

Song.get(:list_by_artist, :id => 1) # la aussi je récupère un
Array...
mais
Song.find(:list_by_artist, :id => 1) me renvoi :

ArgumentError: expected an attributes Hash, got []
        from /var/lib/gems/1.8/gems/activeresource-2.1.0/lib/
active_resource/base.rb:883:in `load'
        from /var/lib/gems/1.8/gems/activeresource-2.1.0/lib/
active_resource/base.rb:639:in `initialize'
        from /var/lib/gems/1.8/gems/activeresource-2.1.0/lib/active_resource/
base.rb:587:in `new'
        from /var/lib/gems/1.8/gems/activeresource-2.1.0/lib/active_resource/
base.rb:587:in `instantiate_record'
        ...

Rails semble tenter instantier un "record" (instantiate_record) là où
il devrait le faire pour une collection (instantiate_collection)

Il y a t-il une solution à ce problème ?
Est ce que je m'y prend mal ou est ce que ca vient de Rails ?

J'ai déjà codé un petit patch pour avoir le comportement attendu dans
le cas "Song.find(:list_by_artist, :id => 1)" mais j'aimerais d'abord
être sur que le problème vient bien de Rails et pas de moi avant de
soumettre ce pseudo bug.


--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse [EMAIL PROTECTED]
-~----------~----~----~----~------~----~------~--~---

Répondre à