我有一个方法需要循环遍历哈希并检查模型表中是否存在每个键,否则它将删除键/值。
例如
number_hash = { :one => "one", :two => "two" }
并且Number表只有一个列,因此:将删除两个。
如何检查模型是否具有属性?
答案 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_name
或number.class.method_defined? attr_name
。
我必须为具有别名字段的Mongoid对象执行此操作。
答案 2 :(得分:7)
在您的实例对象中,您还可以使用defined? instance.attribute
或instance.respond_to? :attribute
这些是检查模型属性或任何方法的更通用的解决方案。