Rails / Ruby - 如何检查attr_accessor字段是否存在?

时间:2015-04-14 04:16:07

标签: ruby-on-rails ruby

在Rails 3/4模型中,如果使用field1声明字段attr_accessor

attr_accessor :field1

如果模型中存在field1,如何检查? column_exists?method_defined?似乎只使用模型列而field1不是模型列。

2 个答案:

答案 0 :(得分:10)

attr_accessor定义了两种方法:def field1def field1=(val),因此您可以做的最好的事情是检查这两个函数是否存在。

如果你有一个对象:

object.respond_to? :field1
object.respond_to? :field1=

如果你不这样做,请使用:

Class.instance_methods.include? :field1
Class.instance_methods.include? :field1=

答案 1 :(得分:3)

attr_accessor将在类

中创建getter和setter方法

在Rails中,方法column_names将返回列名数组。您可以检查列中是否存在该列。

ModelClass.column_names.include?('column_name')

如果您不使用Rails但只使用普通的Ruby,并且想要检查是否定义了getter setter,那么您应该在对象上使用respond_to?方法。