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

use*_*363 3 ruby ruby-on-rails

在Rails 3/4模型中,如果field1声明了一个字段attr_accessor:

attr_accessor :field1
Run Code Online (Sandbox Code Playgroud)

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

mak*_*han 10

attr_accessor定义了两种方法:def field1并且def field1=(val),所以你能做的最好的就是检查这两个函数是否存在.

如果你有一个对象:

object.respond_to? :field1
object.respond_to? :field1=
Run Code Online (Sandbox Code Playgroud)

如果不这样做,请使用:

Class.instance_methods.include? :field1
Class.instance_methods.include? :field1=
Run Code Online (Sandbox Code Playgroud)