2013-01-25 26 views
18

Tôi làm cách nào để có được tên lớp của mô hình mà tôi đang đưa vào?Đường ray: Nhận tên lớp bên ngoài bên trong mối quan tâm

Tôi đang tạo mối quan tâm cho phạm vi như được mô tả ở đây https://stackoverflow.com/a/14483808/1715035 nhưng cần tên mẫu cho tìm kiếm đa hình.

self.table_name hoạt động tốt và do đó, self.table_name.singularize.titleize.gsub(/\s+/, "") nhưng có thể có cách dễ dàng hơn để có được tên lớp.

+2

Hãy nhớ 'tự' _IS_ chính lớp :) Giống như Andy nói; chỉ sử dụng 'self',' self.name' hoặc chỉ 'tên'. – Casper

Trả lời

29

Bạn có thể sử dụng phương thức name như bạn sẽ làm trong chính lớp đó.

module M 
    extend ActiveSupport::Concern 

    included do 
    scope :my_fancy_scope, where(some_type: name) 
    end 
end 
+0

Ah, vì một lý do nào đó tôi cứ cố gắng self.class.name, nhưng vâng, nó hoạt động rất tốt! – WhoDidThis

+4

Khối 'include' được thực hiện trong bối cảnh của lớp, trong đó' self' sẽ là 'YourModel' và do đó' self.class' sẽ là 'Lớp' - không phải là thứ bạn muốn! :) –

+0

Thực tế 'self.class.name' sẽ dẫn đến những gì bạn muốn. Mặc dù tôi không thể tìm thấy thực tế là 'self = TheClass', trong tài liệu. – lllllll

Các vấn đề liên quan