如何检查模型是否具有某个列/属性?

dMi*_*Mix 116 ruby-on-rails

我有一个方法需要循环哈希并检查模型表中是否存在每个键,否则它将删除键/值.

例如

number_hash = { :one => "one", :two => "two" }
Run Code Online (Sandbox Code Playgroud)

而Number表只有一列:所以:两列将被删除.

如何检查模型是否具有属性?

And*_*art 194

对于一个班级

使用属性的字符串名称Class.column_names.include? attr_name在哪里attr_name.

在这种情况下: Number.column_names.include? 'one'

例如

使用record.has_attribute?(:attr_name)record.has_attribute?('attr_name')(Rails 3.2+)或record.attributes.has_key? attr_name.

在这种情况下:number.has_attribute?(:one)number.has_attribute?('one')number.attributes.has_key? 'one'

  • 在Rails 3.2+中,使用`number.has_attribute?`接受符号或字符串 (27认同)
  • 您可以简单地添加“record.try(:column_name)”,如果列不存在,它将返回 nil (2认同)

Nic*_*ick 13

如果您还需要检查别名,可以使用Number.method_defined? attr_namenumber.class.method_defined? attr_name.

我必须为具有别名字段的Mongoid对象执行此操作.

  • `ModelName.method_defined?:attr_name`运作良好! (2认同)

Alt*_*gos 9

在您的实例对象中,您也可以使用defined? instance.attributeinstance.respond_to? :attribute.
这些是检查模型属性或任何方法的更通用的解决方案.

  • 请记住:`instance.respond_to?(:attribute)== false; instance.attribute; instance.respond_to?(:attribute)== true` (3认同)