Bagaimana saya bisa mendapatkan nama kelas dari objek ActiveRecord?
Saya sudah:
result = User.find(1)
Saya mencoba:
result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"
Saya hanya perlu nama kelas, dalam sebuah string ( User
dalam hal ini). Apakah ada metode untuk itu?
Saya tahu ini cukup mendasar, tetapi saya mencari dokumen Rails dan Ruby, dan saya tidak dapat menemukannya.
ruby-on-rails
ruby
rails-activerecord
dan saya
sumber
sumber
Object#class.inspect
memberikan hal yang samaObject#class.name
, sedangkan ini bukan kasus dengan objek ActiveRecord.Jawaban:
Anda ingin memanggil .name di kelas objek:
sumber
result.class.name.split('::').last
result.class.name.demodulize
User.name
.User.to_s
juga sepertinya berhasil.Inilah jawaban yang benar, diekstraksi dari komentar oleh Daniel Rikowski dan pseidemann. Saya lelah harus menyiangi komentar untuk menemukan jawaban yang tepat ...
Jika Anda menggunakan Rails (ActiveSupport):
Jika Anda menggunakan POR (plain-ol-Ruby):
sumber
Keduanya
result.class.to_s
danresult.class.name
bekerja.sumber
Jika Anda ingin mendapatkan nama kelas dari dalam metode kelas,
class.name
atauself.class.name
tidak akan berfungsi. Ini hanya akan menampilkanClass
, karena kelas suatu kelasClass
. Sebagai gantinya, Anda bisa menggunakanname
:keluaran:
sumber
Dalam kasus saya ketika saya menggunakan sesuatu seperti
result.class.name
saya mendapat sesuatu sepertiModule1::class_name
. Tetapi jika kita hanya inginclass_name
, gunakanresult.class.table_name.singularize
sumber