我有一个方法需要循环散列,并检查每个键是否存在于模型表中,否则将删除键/值。如何检查模型是否具有某个列/属性?
例如
number_hash = { :one => "one", :two => "two" }
和Number表只具有:一列这样:2将被删除。
如何检查模型是否有属性?
我有一个方法需要循环散列,并检查每个键是否存在于模型表中,否则将删除键/值。如何检查模型是否具有某个列/属性?
例如
number_hash = { :one => "one", :two => "two" }
和Number表只具有:一列这样:2将被删除。
如何检查模型是否有属性?
对于一类
使用Class.column_names.include? attr_name
其中attr_name
是你的属性的字符串名称。
在这种情况下:Number.column_names.include? 'one'
对于实例
record.has_attribute?(:attr_name)
使用或record.has_attribute?('attr_name')
(滑轨3.2+)或record.attributes.has_key? attr_name
。
在这种情况下:number.has_attribute?(:one)
或number.has_attribute?('one')
或number.attributes.has_key? 'one'
如果您需要检查的别名,以及,你可以使用Number.method_defined? attr_name
或number.class.method_defined? attr_name
。
我必须为具有别名字段的Mongoid对象执行此操作。
'ModelName.method_defined? :attr_name'运行良好! – 2014-08-28 07:26:07
在您的实例对象中,您也可以使用defined? instance.attribute
或instance.respond_to? :attribute
。
这些是检查模型属性或任何方法的更通用的解决方案。
请记住:'instance.respond_to?(:attribute)== false; instance.attribute; instance.respond_to?(:attribute)== true' – kbrock 2016-03-24 05:30:35
对于奖励积分,使用'Hash#select':'number_hash.select {| key,value | Number.column_names.include? key}' – hgmnz 2009-11-10 18:31:22
在Rails 3.2+中,使用'number.has_attribute?',它接受符号或字符串 – 2012-07-18 17:25:24
我相信,如果一个对象将一个方法委托给另一个对象,该方法将错误地建议该列存在。我正在检查我的模型中是否有'user',但是由于某些模型委托用户而不得不查找'user_id'。 – MattyB 2015-07-22 16:16:28