Самоанализ атрибута активной записи Ruby on Rails - PullRequest
9 голосов
/ 10 ноября 2010

Каков наилучший способ получить тип атрибута в 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 ]

13 голосов
/ 10 ноября 2010

Даже без экземпляра модели вы можете использовать Model.columns_hash, который является хешем столбцов модели, введенных в имя атрибута, например,

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

Обновление

Как прокомментировал Кевин , если у вас есть экземпляр модели (например, @user), то можно использовать метод column_for_attribute, например

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

Из документов Rails API вы можете видеть, что это просто оболочка, которая вызывает columns_hash для класса экземпляра:

def column_for_attribute(name)
  self.class.columns_hash[name.to_s]
end
0 голосов
/ 22 февраля 2016
Model.type_for_attribute('attr_name') # ActiveModel::Type::Value
Model.attribute_types
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...