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

时间:2009-11-10 18:09:19

标签: ruby-on-rails

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

例如

number_hash = { :one => "one", :two => "two" }

并且Number表只有一个列,因此:将删除两个。

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

3 个答案:

答案 0 :(得分:187)

对于课程

使用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'

答案 1 :(得分:10)

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

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

答案 2 :(得分:7)

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