Esto parece bastante simple pero no puedo conseguir que aparezca en Google.Los raíles encuentran registro con cero has_many records asociados
Si tengo:
class City < ActiveRecord::Base
has_many :photos
end
class Photo < ActiveRecord::Base
belongs_to :city
end
Quiero encontrar todas las ciudades que no tienen fotos. Me encantaría poder llamar algo como ...
City.where(photos.empty?)
... pero eso no existe. Entonces, ¿cómo haces este tipo de consulta?
Actualización: Habiendo encontrado una respuesta a la pregunta original, tengo curiosidad, ¿cómo se construye la inversa?
IE: si quería crear estos como alcances:
scope :without_photos, includes(:photos).where(:photos => {:city_id=>nil})
scope :with_photos, ???
Desde que descubrí esta pregunta (http://stackoverflow.com/q/5319400/417872) Creo que esto se puede cerrar . Sin embargo, probablemente valga la pena tener una forma más de encontrar esto en Google, este tipo de cosas es difícil de describir y, por lo tanto, es difícil de buscar. – Andrew
En Rails 4, puede usar el nuevo método '.not' para el inverso. 'City.includes (: fotos) .where.not (fotos: {city_id: nil})' –
Posible duplicado de [Quiere buscar registros sin registros asociados en Rails 3] (https://stackoverflow.com/questions/ 5319400/want-to-find-records-with-no-associated-records-in-rails-3) –