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.