--- title: "has_one - find all that have no associated object" kind: article slug: has_one-find-all-that-have-no-associated-object created_at: 2009-06-07 tags: - General - Ruby - Rails - has_one - has_many - belongs_to --- Let me pose a typical Rails situation:
class Person < ActiveRecord::Base
  has_one :fancy_hat
end

class FancyHat < ActiveRecord::Base
  belongs_to :person
end
Now, how can you get all the people that don't have a fancy hat?
class Person < ActiveRecord::Base
  has_one :fancy_hat

  named_scope :hatless, :joins => 'LEFT JOIN fancy_hats ON fancy_hats.person_id = people.id', :conditions => 'fancy_hats.person_id IS NULL'
end
Now you can find all the hatless people you want. FYI: Finding fancy hats that have no one to wear them is a lot easier, because the foreign key is stored in the fancy_hats table.
class FancyHat < ActiveRecord::Base
  belongs_to :person

  named_scope :wearerless, :conditions => { :person_id => nil }
end