2009-05-05 20 views
317

Sınıf adını ActiveRecord nesnesinden nasıl alabilirim?Ruby sınıfının adını nasıl alabilirim?

Ben:

result = User.find(1) 

Denedim:

result.class 
# => User(id: integer, name: string ...) 
result.to_s 
# => #<User:0x3d07cdc>" 

Ben bir dize (bu durumda User) 'de, yalnızca sınıf adı lazım. Bunun için bir yöntem var mı?

Bunun çok basit olduğunu biliyorum, ancak hem Rails 'hem de Ruby'nin belgelerini aradım ve bulamadım.

+1

@Oliver N .: kullanmak ActiveRecord nesneler ile durum. –

cevap

604

Nesnenin sınıfı .name aramak istediğiniz:

result.class.name 
+3

Bunu yaptığımda Modül isimlerini daha önce aldım, yani "Module :: SubModule :: Class", "Class" –

+22

@Abe: 'result.class.name.split (':: ') .last' –

+72

@Abe: daha temiz (ActiveSupport): 'result.class.name.demodulize' – pseidemann

31

result.class.to_s ve result.class.name işi de.

+28

Ama kavramsal olarak, # isim ismini döndürür, #to_s bir dizgi gösterimi döndürür sadece isimle özdeş olur. # İsim kullanıp, anal kalıcılığın dışına çıkmış olurdum. – kch

87

İşte doğru cevap, Daniel Rikowski ve pseidemann'ın yorumları. Ben

... doğru cevabı bulmak için yorumları aracılığıyla ot yapmaktan yoruldum sen Rails (ActiveSupport) kullanıyorsanız:

result.class.name.demodulize 

Eğer POR (düz-ol-Yakut) kullanıyorsanız:

benim durumumda
result.class.name.split('::').last 
0

ben Module1::class_name gibi bir şey var result.class.name gibi bir şey kullandığınızda. biz sadece class_name isterseniz bu değil oysa Fakat, `Nesne # class.inspect`, Object # class.name`` aynı verir Normal Yakut nesneler ile

result.table_name.singularize

İlgili konular