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''