Как проверить, имеет ли модель определенный столбец/атрибут?

У меня есть метод, который должен пройти через хэш и проверить, существует ли каждый ключ в таблице моделей, иначе он удалит ключ/значение.

например

number_hash = { :one => "one", :two => "two" }

а таблица Number имеет только один столбец: два будут удалены.

Как проверить, имеет ли модель атрибут или нет?

Ответ 1

Для класса

Используйте Class.column_names.include? attr_name, где attr_name - это имя строки вашего атрибута.

В этом случае: Number.column_names.include? 'one'

Для экземпляра

Используйте record.has_attribute?(:attr_name) или record.has_attribute?('attr_name') (Rails 3.2+) или record.attributes.has_key? attr_name.

В этом случае: number.has_attribute?(:one) или number.has_attribute?('one') или number.attributes.has_key? 'one'

Ответ 2

Если вам нужно также проверить псевдонимы, вы можете использовать Number.method_defined? attr_name или number.class.method_defined? attr_name.

Я должен был сделать это для объекта Mongoid, у которого были псевдонимы.

Ответ 3

В объекте экземпляра вы также можете использовать defined? instance.attribute или instance.respond_to? :attribute.
Это более общее решение для проверки атрибута модели или любого метода.

Ответ 4

Откройте терминал и консоль Open, используя "rails c", затем введите "Model.column_names". Он отобразит все поля столбцов в модели (таблице)