У меня есть метод, который должен пройти через хэш и проверить, существует ли каждый ключ в таблице моделей, иначе он удалит ключ / значение.
например
number_hash = { :one => "one", :two => "two" }
а в таблице Number есть только один столбец, поэтому два будут удалены.
Как проверить, есть ли у модели атрибут?
ruby-on-rails
DMIX
источник
источник
Hash#select
:number_hash.select { |key, value| Number.column_names.include? key }
number.has_attribute?
который принимает символ или строкуuser
, но вместо этого мне приходилось искать,user_id
поскольку некоторые модели делегировали user.Hash#has_key?
устарел в пользуHash#key?
Number.attribute_method? 'one'
Если вам также нужно проверить псевдонимы, вы можете использовать
Number.method_defined? attr_name
илиnumber.class.method_defined? attr_name
.Мне пришлось сделать это для объекта Mongoid, у которого были псевдонимы полей.
источник
ModelName.attribute_method? :attr_name
что сработало в моем экземпляреВ вашем экземпляре объекта вы также можете использовать
defined? instance.attribute
илиinstance.respond_to? :attribute
.Это более общее решение для проверки атрибута модели или любого метода.
источник
instance.respond_to?(:attribute) == false ; instance.attribute ; instance.respond_to?(:attribute) == true