J'ai une méthode qui doit parcourir un hachage et vérifier si chaque clé existe dans une table de modèles, sinon elle supprimera la clé / valeur.
par exemple
number_hash = { :one => "one", :two => "two" }
et la table des nombres n'a qu'une colonne: un donc: deux seront supprimés.
Comment vérifier si un modèle a un attribut ou non?
ruby-on-rails
dMix
la source
la source
Hash#select
:number_hash.select { |key, value| Number.column_names.include? key }
number.has_attribute?
qui accepte un symbole ou une chaîneuser
, mais je devais plutôt chercheruser_id
depuis que certains modèles ont délégué l'utilisateur.Hash#has_key?
est déconseillé au profit deHash#key?
Number.attribute_method? 'one'
Si vous devez également rechercher des alias, vous pouvez utiliser
Number.method_defined? attr_name
ounumber.class.method_defined? attr_name
.J'ai dû faire cela pour un objet mongoïde qui avait des champs aliasés.
la source
ModelName.attribute_method? :attr_name
ce qui a fonctionné dans mon casDans votre objet d'instance, vous pouvez également utiliser
defined? instance.attribute
ouinstance.respond_to? :attribute
.Il s'agit d'une solution plus générique pour vérifier un attribut de modèle ou toute méthode.
la source
instance.respond_to?(:attribute) == false ; instance.attribute ; instance.respond_to?(:attribute) == true