Thanks Jeff, I just tried this out and it's much faster (5-8x) than my method (I'm guessing it's because it dosen't have to select * from recordings).
On Feb 16, 1:52 pm, Jeff Lewis <[email protected]> wrote: > Hi Peter, > > One way, via two queries would be something like: > > # in app/models/user.rb: > def not_yet_listened_recordings > ls = Listening.find_by_sql(["select distinct recording_id from > listenings where user_id=?, self.id]) > return Recording.find(:all) if not ls or ls.empty? > > criteria_a = [] > vals_a = [] > ls.each do |l| > criteria_a << "id<>?" > vals_a << l.recording_id.to_i > end > qstr = "select * from recordings where #{criteria_a.join(' and > ')}" > sql_a = [qstr] + vals_a > return Recording.find_by_sql(sql_a) > end > > ... > > which you would then be able to call like: > > ... > user.not_yet_listened_recordings > ... > > Jeff > > On Feb 16, 7:10 am, Peter Browne <[email protected]> wrote: > > > I have 3 models with a has_many through association: > > > class Recording > > has_many :listenings > > has_many :listeners, :through => :listenings, :source => :user > > ... > > end > > > class User > > has_many :listenings, :foreign_key => "listener_id" > > has_many :listened_recordings, :foreign_key => > > "listener_id", :through => :listenings, :source => :recording > > ... > > end > > > class Listening > > belongs_to :recording > > belongs_to :listener, :class_name => "User" > > ... > > end > > > So I can get the recordings the user has listened to, easily with: > > > user.listened_recordings > > > How do create a find method that retrieves all of the recordings the > > user has not listened to? > > The way I have been doing it is: > > > Recording.all.reject { |r| listened_recordings.include?(r) } --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---

