ruby-on-rails - software - ruby on rails tutorial
¿Cómo verificar si un modelo tiene una determinada columna/atributo? (3)
En su objeto de instancia, ¿podría usar también defined? instance.attribute
defined? instance.attribute
o instance.respond_to? :attribute
instance.respond_to? :attribute
.
Estas son una solución más genérica para verificar un atributo del modelo o cualquier otro método.
Tengo un método que necesita recorrer un hash y verificar si cada clave existe en una tabla de modelos, de lo contrario eliminará la clave / valor.
por ejemplo
number_hash = { :one => "one", :two => "two" }
y la tabla de números solo tiene una: una columna, por lo que se eliminarán dos.
¿Cómo puedo verificar si un modelo tiene un atributo o no?
Si necesita verificar también los alias, puede usar Number.method_defined? attr_name
Number.method_defined? attr_name
o number.class.method_defined? attr_name
number.class.method_defined? attr_name
Tuve que hacer esto para un objeto Mongoid que tenía campos alias.
Para una clase
Use Class.column_names.include? attr_name
Class.column_names.include? attr_name
donde attr_name
es el nombre de la cadena de tu atributo.
En este caso: Number.column_names.include? ''one''
Number.column_names.include? ''one''
Por una instancia
Use record.has_attribute?(:attr_name)
o record.has_attribute?(''attr_name'')
(Rails 3.2+) o record.attributes.has_key? attr_name
record.attributes.has_key? attr_name
En este caso: number.has_attribute?(:one)
number.has_attribute?(''one'')
number.has_attribute?(:one)
o number.has_attribute?(''one'')
number.attributes.has_key? ''one''
number.has_attribute?(''one'')
o number.attributes.has_key? ''one''
number.attributes.has_key? ''one''