Bon j'aurais fait les questions et les réponses sur ce thread mais au
cas ou ca puisse aider quelqu'un voilà la solution :

Song.find(:all, :from => :list_by_artist, :params => {:artist_id =>
1})
fera bien un appel à
http://monsite/songs/list_by_artist?artist_id=1

avant d'instantier les résultats comme des objets ActiveResource.

Ma confusion est venu de cet article
http://ryandaigle.com/articles/2007/4/26/what-s-new-in-edge-rails-activeresource-gets-custom-methods
de Ryan Daigle et DHH qui malheureusement est soit faux (pour le
dernier exemple), soit plus à jour (plus probable).

Merci quand même :D

On 21 juil, 13:54, jblanche <[EMAIL PROTECTED]> wrote:
> J'ai eu deux trois mails "persos" pour m'expliquer qu'il suffisait de
> faire artist.songs ou encore des find_all_by_artist_id, mais tout ceci
> ne fonction que dans ActiveRecord, pas dans activeResource, donc si
> qqn à une meilleure idée, je suis toujours à l'écoute.
>
> On 20 juil, 15:27, jblanche <[EMAIL PROTECTED]> wrote:
>
> > 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 à