Как проверить, имеет ли модель определенный столбец/атрибут?
У меня есть метод, который должен пройти через хэш и проверить, существует ли каждый ключ в таблице моделей, иначе он удалит ключ/значение.
например
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". Он отобразит все поля столбцов в модели (таблице)