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 Número solo tiene una columna: una, por lo que se eliminarán dos.
¿Cómo verifico si un modelo tiene un atributo o no?
                    
                        ruby-on-rails
                                
                    
                    
                        dMix
fuente
                
                
            fuente

Hash#select:number_hash.select { |key, value| Number.column_names.include? key }number.has_attribute?que acepta un Símbolo o una Cadenauser, pero en su lugar tuve que buscaruser_idya que algunos modelos delegaron al usuario.Hash#has_key?está en desuso a favor deHash#key?Number.attribute_method? 'one'Si necesita verificar también los alias, puede usar
Number.method_defined? attr_nameonumber.class.method_defined? attr_name.Tuve que hacer esto para un objeto Mongoid que tenía alias de campos.
fuente
ModelName.attribute_method? :attr_namefue lo que funcionó en mi casoEn su objeto de instancia, puede usar también
defined? instance.attributeoinstance.respond_to? :attribute.Estas son soluciones más genéricas para verificar un atributo del modelo o cualquier método también.
fuente
instance.respond_to?(:attribute) == false ; instance.attribute ; instance.respond_to?(:attribute) == true