如何检查一个模型是否有一个特定的列/属性?

我有一个方法需要通过散列循环,并检查每个键是否存在于模型表中,否则将删除键/值。

例如

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_namenumber.class.method_defined? attr_name number.class.method_defined? attr_name

我不得不这样做一个Mongoid对象,有别名字段。

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

打开terminal并使用“rails c”打开控制台,然后键入“Model.column_names”它将列出模型(表格)中的所有列字段,