Eu tenho um método que precisa fazer um loop através de um hash e verificar se cada chave existe em uma tabela de modelos, caso contrário, ele excluirá a chave / valor.
por exemplo
number_hash = { :one => "one", :two => "two" }
e a tabela Number possui apenas uma: uma coluna; portanto, duas serão excluídas.
Como verifico se um modelo tem um atributo ou não?
ruby-on-rails
dMix
fonte
fonte
Hash#select
:number_hash.select { |key, value| Number.column_names.include? key }
number.has_attribute?
que aceita um símbolo ou uma Stringuser
, mas precisava procurar,user_id
pois alguns modelos delegavam usuário.Hash#has_key?
é reprovado em favor deHash#key?
Number.attribute_method? 'one'
Se você precisar verificar aliases também, poderá usar
Number.method_defined? attr_name
ounumber.class.method_defined? attr_name
.Eu tive que fazer isso para um objeto mongóide que tinha campos com alias.
fonte
ModelName.attribute_method? :attr_name
que foi o que funcionou na minha instânciaNo seu objeto de instância, você também pode usar
defined? instance.attribute
ouinstance.respond_to? :attribute
.Estas são soluções mais genéricas para verificar também um atributo de modelo ou qualquer método.
fonte
instance.respond_to?(:attribute) == false ; instance.attribute ; instance.respond_to?(:attribute) == true