Ассоциация has_many
имеет параметр под названием uniq
для этого требования:
class User < ActiveRecord::Base
has_many :favorites
has_many :artists, :through => :favorites, :uniq => true
end
class Artist < ActiveRecord::Base
has_many :favorites
has_many :users, :through => :favorites, :uniq => true
end
class Favorite < ActiveRecord::Base
belongs_to :user
belongs_to :artist
end
Использование:
# if you are expecting an array of users, then use find_all instead of find_
@users = User.find_all_by_age(26, :include => :artists)
@users.each do |user|
user.artists # unique artists
end
Изменить 1
Я обновил ответ на основе комментария пользователя.
Решение 1-: группа
Artist.all(:joins => :users, :group => :id,
:conditions => ["users.age = ?", 26])
Решение 2 - ВЫБЕРИТЕ ОТЛИЧИЕ
Artist.all(:joins => :users, :select => "DISTINCT artists.*",
:conditions => ["users.age = ?", 26]))