In my Rails models I have:
class Song < ActiveRecord::Base
has_many :flags
has_many :accounts, :through => :flags
end
class Account < ActiveRecord::Base
has_many :flags
has_many :songs, :through => :flags
end
class Flag < ActiveRecord::Base
belongs_to :song
belongs_to :account
end
I’m looking for a way to create a scope in the Song model that fetches songs that DO NOT have a given account associated with it.
I’ve tried:
Song.joins(:accounts).where('account_id != ?', @an_account)
but it returns an empty set. This might be because there are songs that have no accounts attached to it? I’m not sure, but really struggling with this one.
Update
The result set I’m looking for includes songs that do not have a given account associated with it. This includes songs that have no flags.
Thanks for looking.
Am I understanding your question correctly – you want Songs that are not associated with a particular account?
Try:
Answer revised: (in response to clarification in the comments)
You probably want SQL conditions like this:
Or in ARel, you could get the same SQL generated like this:
I generally prefer ARel, and I prefer it in this case too.