代码之家  ›  专栏  ›  技术社区  ›  Kevin Sylvestre

Ruby on Rails活动记录属性内省

  •  9
  • Kevin Sylvestre  · 技术社区  · 14 年前

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

    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 回复  |  直到 14 年前
        1
  •  13
  •   Tim Diggins    7 年前

    即使没有可以使用的模型实例 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
    
        2
  •  0
  •   John Doe    9 年前
    Model.type_for_attribute('attr_name') # ActiveModel::Type::Value
    Model.attribute_types