2015-08-31 15 views
7

Tôi đang cố gắng sử dụng các sàng lọc ruby ​​để áp dụng móc treo.Tinh chỉnh và móc của Ruby

Tôi muốn tránh vá khỉ. Khi khỉ vá nó sẽ làm việc như vậy

ActiveRecord::Base.class_eval do 
    after_find do 
    # do something with 
    my_method 
    end 

    def my_method 
    # something useful 
    end 
end 

tôi đã có thể để có phương pháp lớp học bằng cách làm một cái gì đó giống như ví dụ:

module ActiveRecordRefinements 
    refine ActiveRecord::Base.singleton_class do 
    def my_method 
    #something cool 
    end 
    end 
end 

Nhưng tôi không thể chạy các móc. Tôi đã thử sử dụng self.used(klass) nhưng dường như không thể nhận cú pháp vừa phải.

Mọi trợ giúp đều được chào đón.

Cảm ơn.

+2

Bạn không cần phải gọi '# singleton_class' trên' ActiveRecord :: Base' vì sàng lọc là đơn. – Nathan

+0

Tôi đang cố gắng thêm vào DSL của AR. Một cái gì đó như '' ' lớp Foo Max

+0

Có một dòng tiền phạt giữa việc vá khỉ và tiêm phụ thuộc. Thông thường, việc vá khỉ được định nghĩa là xác định lại hành vi cốt lõi theo cách không nhất thiết phải làm việc với các phiên bản sau của lõi. Một mô hình tiêm phụ thuộc sạch hơn cố gắng tránh xung đột và duy trì một dấu chân tối thiểu. – tadman

Trả lời

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