Очень эффективный способ - использовать find_by_sql
, чтобы позволить базе данных выполнять тяжелую работу:
uncategorized_items = Item.find_by_sql("select * from items where category_id IS NULL")
Другим способом является именованная область действия:
class Item < ActiveRecord::Base
scope :uncategorized, where(:category_id => nil) # rails 3
# or...
named_scope :uncategorized, :conditions => 'category_id IS NULL'
end
Это всего лишьпара идей.Я предполагаю, что как только вы найдете эти нарушенные ассоциации, вы планируете их исправить, верно?Возможно, вы захотите использовать validates_associated
в обеих моделях, если для вас важно, чтобы это больше не повторилось.
Вы можете использовать find_by_sql и левое внешнее объединение, чтобы найти все элементы в одной таблице, но не другую.Здесь я использую таблицу загрузок и таблицу image_files (я включил только SQL):
SELECT d.*, d.image_file_id
from downloads as d
LEFT OUTER JOIN image_files as i
ON i.id = d.image_file_id
WHERE d.image_file_id IS NULL