¿Cómo comprobar si un modelo tiene una determinada columna / atributo?
Tengo un método que necesita hacer un bucle a través de 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 columna :one, por lo que se eliminarán dos.
¿Cómo puedo comprobar si un modelo tiene un atributo o no?
3 answers
Para una clase
Use Class.column_names.include? attr_name
donde attr_name
es el nombre de cadena de su atributo.
En este caso: Number.column_names.include? 'one'
Por ejemplo
Use record.has_attribute?(:attr_name)
o record.has_attribute?('attr_name')
(Carriles 3.2+) o record.attributes.has_key? attr_name
.
En este caso: number.has_attribute?(:one)
o number.has_attribute?('one')
o number.attributes.has_key? 'one'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-25 04:34:51
Si también necesita buscar alias, puede usar Number.method_defined? attr_name
o number.class.method_defined? attr_name
.
Tuve que hacer esto para un objeto Mongoid que tenía campos aliased.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-05 19:24:48
En su objeto de instancia, puede usar también defined? instance.attribute
o instance.respond_to? :attribute
.
Estas son soluciones más genéricas para verificar un atributo de modelo o cualquier método también.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-18 21:20:42