Ruby on Rails主动记录属性内省

Kev*_*tre 9 ruby-on-rails

什么是让(属性已被分配,甚至之前)的活动记录的属性的类型的最佳方式?例如(这不起作用,只是目标):

User.new
User.inspect(:id)         # :integer
User.inspect(:name)       # :string
User.inspect(:password)   # :string
User.inspect(:updated_at) # :datetime
User.inspect(:created_at) # :datetime
Run Code Online (Sandbox Code Playgroud)

谢谢!

mik*_*kej 13

即使没有模型实例,您也可以使用Model.columns_hash,这是在属性名称上键入的模型上的列的哈希,例如

User.columns_hash['name'].type # => :string
User.columns_hash['id'].type # => :integer
User.columns_hash['created_at'].type # => :datetime
Run Code Online (Sandbox Code Playgroud)

更新

正如凯文已经评论过自己,如果你有一个模型实例(例如@user),那么column_for_attribute可以使用该方法,例如

@user.column_for_attribute(:name) # => :string
Run Code Online (Sandbox Code Playgroud)

Rails API文档中,您可以看到这只是一个调用columns_hash实例类的包装器:

def column_for_attribute(name)
  self.class.columns_hash[name.to_s]
end
Run Code Online (Sandbox Code Playgroud)