Consejo asociaciones y find para recomendar artistas

Hola a todos,

Estoy creando una aplicación de contenido musical y quería consultaros
como realizar algunas cosas o si lo que ya estoy haciendo os parece
correcto. Os pongo en situación en cuanto a modelos y asociaciones entre
ello:

class InfoArtist < ActiveRecord::Base
belongs_to :catalog
has_many :similars, :class_name => “SimilarArtist”, :foreign_key =>
“info_artist_id”
has_many :similarartists, :through => :similars, :source => :similar,
:order => “similar_artists.match DESC”
end

class SimilarArtist < ActiveRecord::Base
belongs_to :info_artist
belongs_to :similar, :class_name => “InfoArtist”, :foreign_key =>
:similar_id
end

Es decir, tengo una tabla info_artists y una tabla similar_artists
(info_artist_id, similar_id, match) (match grado de similitud entre
artistas).

Y ahora llega lo complicado y donde me surgen las dudas. Para recomendar
artistas a un usuario. En mi aplicación el usuario puede tener muchos
InfoArtists que ha introducido previamente, los SimilarArtist son
obtenidos por mi aplicación através de Lastfm y apartir de estos
obtendre las recomendaciones. He hecho lo siguiente:

class Catalog < ActiveRecord::Base
has_many :info_artists

def recommended_artists
info_artists_ids = info_artists.map(&:id)
unless info_artists_ids.empty?
similar_artists = SimilarArtist.find(:all,
:conditions => {:info_artist_id => info_artists_ids},
:select => ‘similar_artists.similar_id’,
:group => ‘similar_artists.similar_id’,
:order => ‘similar_artists.match DESC’)

  # Elimino los info_artists que ya conoce el usuario
  recomended_ids = similar_artists.map(&:similar_id) - 

info_artists_ids
# Recupero los similares incluyendo su información
SimilarArtist.find(:all,
:conditions => {:similar_id => recomended_ids},
:include => [:info_artist, :similar],
#:select => ‘similar_artists.info_artist_id,
similar_artists.similar_id, similar_artists.match’,
:group => ‘similar_artists.similar_id’,
:order => ‘similar_artists.match DESC’,
:limit => 10)
end
end

El primer problema que encuentro es que no hace caso del include, y esa
información es necesaria para mostrarla en la vista. Como no se incluye
esa información al mostrar los recomendados se realizan nuevas pequeñas
consultas para recuperar esos datos. Quiero mostrar a quien recomiendo
(similar) para un info_artist que ya conoce el usuario.

Espero que me puedan ayudar, o sugerir algo.

Un saludo y gracias.

El código en pastie: http://pastie.org/249923

end