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_id
ya 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_name
onumber.class.method_defined? attr_name
.Tuve que hacer esto para un objeto Mongoid que tenía alias de campos.
fuente
ModelName.attribute_method? :attr_name
fue lo que funcionó en mi casoEn su objeto de instancia, puede usar también
defined? instance.attribute
oinstance.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