Ruby on Rails主动记录属性内省

时间:2010-11-10 08:10:21

标签: ruby-on-rails

在Active Record中获取属性类型的最佳方法是什么(甚至在分配属性之前)?例如(这不起作用,只是目标):

User.new
User.inspect(:id)         # :integer
User.inspect(:name)       # :string
User.inspect(:password)   # :string
User.inspect(:updated_at) # :datetime
User.inspect(:created_at) # :datetime

谢谢!

2 个答案:

答案 0 :(得分:13)

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

User.columns_hash['name'].type # => :string
User.columns_hash['id'].type # => :integer
User.columns_hash['created_at'].type # => :datetime

<强>更新

由于Kevin已对自己进行了评论,如果您有模型实例(例如@user),则可以使用column_for_attribute方法,例如。

@user.column_for_attribute(:name) # => :string

Rails API docs你可以看到这只是一个在实例类上调用columns_hash的包装器:

def column_for_attribute(name)
  self.class.columns_hash[name.to_s]
end

答案 1 :(得分:0)

 $(".commented-container").uncomment();