在Rails 3/4模型中,如果使用field1
声明字段attr_accessor
:
attr_accessor :field1
如果模型中存在field1
,如何检查? column_exists?
和method_defined?
似乎只使用模型列而field1
不是模型列。
答案 0 :(得分:10)
attr_accessor
定义了两种方法:def field1
和def field1=(val)
,因此您可以做的最好的事情是检查这两个函数是否存在。
如果你有一个对象:
object.respond_to? :field1
object.respond_to? :field1=
如果你不这样做,请使用:
Class.instance_methods.include? :field1
Class.instance_methods.include? :field1=
答案 1 :(得分:3)
attr_accessor
将在类
在Rails中,方法column_names
将返回列名数组。您可以检查列中是否存在该列。
ModelClass.column_names.include?('column_name')
如果您不使用Rails但只使用普通的Ruby,并且想要检查是否定义了getter setter,那么您应该在对象上使用respond_to?
方法。