def blank?
self.attributes.all?{|k,v| v.blank? || %w(id created_at updated_at).include?(k)}
end
Мой ответ почти такой же, как tadman , но выражается более кратко.
Будьте осторожны с двумя ситуациями:
- ** пусто? ** не является хорошим выбором в качестве имени, поскольку, если вы вызовете ** object_a.object_b.blank? **, пытаясь узнать, есть ли object_b внутри object_a, вы получите true событие, если объект существует. ** пусто? ** кажется лучшим именем
- Если базы данных устанавливают значения по умолчанию, это может быть сложно.
РЕДАКТИРОВАТЬ: Так как сборка массива каждая итерация медленная ( спасибо tadman ), лучшее решение:
def empty?
ignored_attrs = {'id' => 1, 'created_at' => 1, 'updated_at' => 1}
self.attributes.all?{|k,v| v.blank? || ignored_attrs[k]}
end