rails query left joins includes active activerecord ruby-on-rails-3 arel active-relation

activerecord - left - rails sql query



¿Cómo excluir una matriz de identificadores de consulta en Rails(usando ActiveRecord)? (3)

Esto debería funcionar:

ids_to_exclude = [1,2,3] items_table = Arel::Table.new(:items) array_without_excluded_ids = Item.where(items_table[:id].not_in ids_to_exclude)

Y está totalmente orientado a objetos sin cadenas :-)

Me gustaría realizar una consulta de ActiveRecord que devuelve todos los registros, excepto aquellos registros que tienen ciertos ID. Los identificadores que me gustaría excluir se almacenan en una matriz. Asi que:

ids_to_exclude = [1,2,3] array_without_excluded_ids = Item. ???

No estoy seguro de cómo completar la segunda línea.

Antecedentes: Lo que ya he probado:

No estoy seguro de que los antecedentes sean necesarios, pero ya he probado varias combinaciones de .find y .where. Por ejemplo:

array_without_excluded_ids = Item.find(:all, :conditions => { "id not IN (?)", ids_to_exclude }) array_without_excluded_ids = Item.where( "items.id not IN ?", ids_to_exclude)

Estos fallan. Este consejo puede estar en el camino correcto, pero no he logrado adaptarlo. Cualquier ayuda sería muy apreciada.


Solución Rails 4:

ids_to_exclude = [1,2,3] array_without_excluded_ids = Item.where.not(id: ids_to_exclude)


También puede utilizar la gema Squeel para realizar dicha consulta. Documentación de la misma, va here