如何检查一个模型是否有一个特定的列/属性?
我有一个方法需要通过散列循环,并检查每个键是否存在于模型表中,否则将删除键/值。
例如
number_hash = { :one => "one", :two => "two" }
而数字表只有一列:所以:两个将被删除。
如何检查模型是否有属性?
对于一个class级
使用Class.column_names.include? attr_name
Class.column_names.include? attr_name
其中attr_name
是属性的string名称。
在这种情况下: Number.column_names.include? 'one'
Number.column_names.include? 'one'
举个例子
使用record.has_attribute?(:attr_name)
record.has_attribute?('attr_name')
record.has_attribute?(:attr_name)
或record.has_attribute?('attr_name')
(Rails 3.2+)或record.attributes.has_key? attr_name
record.attributes.has_key? attr_name
。
在这种情况下: number.has_attribute?(:one)
或number.has_attribute?('one')
or number.attributes.has_key? 'one'
number.attributes.has_key? 'one'
如果你还需要检查别名,你可以使用Number.method_defined? attr_name
number.class.method_defined? attr_name
或number.class.method_defined? attr_name
number.class.method_defined? attr_name
。
我不得不这样做一个Mongoid对象,有别名字段。
在你的实例对象中,你也可以使用defined? instance.attribute
defined? instance.attribute
或instance.respond_to? :attribute
instance.respond_to? :attribute
。
这些是检查模型属性或任何方法的更一般的解决scheme。
打开terminal并使用“rails c”打开控制台,然后键入“Model.column_names”它将列出模型(表格)中的所有列字段,