Ich habe eine Methode, die einen Hash durchlaufen und prüfen muss, ob jeder Schlüssel in einer Modelltabelle vorhanden ist. Andernfalls wird der Schlüssel / Wert gelöscht.
beispielsweise
number_hash = { :one => "one", :two => "two" }
und die Zahlentabelle hat nur eine: eine Spalte, so dass: zwei gelöscht werden.
Wie überprüfe ich, ob ein Modell ein Attribut hat oder nicht?
quelle
Hash#select
:number_hash.select { |key, value| Number.column_names.include? key }
number.has_attribute?
das ein Symbol oder eine Zeichenfolge akzeptiertuser
hatten, musste aber stattdessen suchen,user_id
da einige Modelle Benutzer delegierten.Hash#has_key?
wird zugunsten vonHash#key?
Number.attribute_method? 'one'
Wenn Sie auch nach Aliasen suchen müssen, können Sie
Number.method_defined? attr_name
oder verwendennumber.class.method_defined? attr_name
.Ich musste dies für ein mongoides Objekt tun, das Felder mit Alias hatte.
quelle
ModelName.attribute_method? :attr_name
was in meiner InstanzIn Ihrem Instanzobjekt können Sie auch
defined? instance.attribute
oder verwendeninstance.respond_to? :attribute
.Dies ist eine allgemeinere Lösung, um ein Modellattribut oder eine beliebige Methode zu überprüfen.
quelle
instance.respond_to?(:attribute) == false ; instance.attribute ; instance.respond_to?(:attribute) == true