Pertanyaan Ruby on Rails Rekaman Aktif Atribut Introspeksi


Apa cara terbaik untuk mendapatkan jenis atribut di Rekaman Aktif (bahkan sebelum atribut telah ditetapkan)? Misalnya (ini tidak berhasil, hanya tujuannya):

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

Terima kasih!


9
2017-11-10 08:10


asal


Jawaban:


Bahkan tanpa contoh dari model yang dapat Anda gunakan Model.columns_hash yang merupakan hash dari kolom pada model yang dikunci pada nama atribut mis.

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

Memperbarui

Sebagai Kevin telah mengomentari dirinya sendiri, jika Anda memiliki contoh model (mis. @user) maka itu column_for_attribute metode dapat digunakan mis.

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

Dari Dokumen API Rails Anda dapat melihat ini hanya pembungkus yang memanggil columns_hash di kelas instance:

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

13
2017-11-10 09:25



Model.type_for_attribute('attr_name') # ActiveModel::Type::Value
Model.attribute_types

0
2018-02-21 23:33