Mam metodę, która musi przechodzić przez skrót i sprawdzić, czy każdy klucz istnieje w tabeli modeli, w przeciwnym razie usunie klucz / wartość.
na przykład
number_hash = { :one => "one", :two => "two" }
a tabela Number ma tylko: jedną kolumnę, więc: dwie zostaną usunięte.
Jak sprawdzić, czy model ma atrybut, czy nie?
ruby-on-rails
dMix
źródło
źródło
Hash#select
number_hash.select { |key, value| Number.column_names.include? key }
number.has_attribute?
który akceptuje symbol lub ciąguser
, ale zamiast tego musiałem szukać,user_id
ponieważ niektóre modele delegowały użytkownika.Hash#has_key?
jest przestarzały na korzyśćHash#key?
Number.attribute_method? 'one'
Jeśli chcesz również sprawdzić aliasy, możesz użyć
Number.method_defined? attr_name
lubnumber.class.method_defined? attr_name
.Musiałem to zrobić dla obiektu Mongoid, który miał aliasy pól.
źródło
ModelName.attribute_method? :attr_name
to, co zadziałało w moim przypadkuW obiekcie instancji możesz również użyć
defined? instance.attribute
lubinstance.respond_to? :attribute
.Są to bardziej ogólne rozwiązania do sprawdzania atrybutu modelu lub dowolnej metody.
źródło
instance.respond_to?(:attribute) == false ; instance.attribute ; instance.respond_to?(:attribute) == true