2012-08-16 23 views
15

Tôi đang cố gắng để trọng một phương pháp helper của base_helper.rb bằng cách sử dụng này:Spree trọng phương pháp helper

module Spree 
    module BaseHelper.class_eval do 

    def taxons_tree(root_taxon, current_taxon, max_level = 1) 
     ..... 
    end 

    end 
end 

Nó không làm việc cho tôi. Bất cứ ai biết những gì tôi đang thiếu ở đây?

Cảm ơn bạn!

cố định:

tôi nên sử dụng:

Spree::BaseHelper.module_eval do 

    def taxons_tree(root_taxon, current_taxon, max_level = 1) 
     ... 
    end 

end 

để thay thế.

+0

Đối với tôi chỉ làm việc khi được sử dụng 'Spree :: BaseHelper.class_eval' –

Trả lời

20

Re-mở module sẽ chỉ làm việc cũng như:

module Spree 
    module BaseHelper 
    def taxons_tree(root_taxon, current_taxon, max_level = 1) 
     ... 
    end 
    end 
end 

Không có lý do đặc biệt để sử dụng class_evalmodule_eval, nó chỉ được thói quen trong dự án Spree trong một thời gian rất dài.

+2

Ryan, nơi nào chúng tôi đặt mã này. Tôi cần phải ghi đè 'link_to_cart'method để tạo một phân đoạn giỏ hàng tùy chỉnh. Tôi đang đến hình thức PHP và nếu đây là một câu hỏi Rails, tôi xin lỗi nhưng đánh giá cao một bình luận. –

+3

Tạo một thư mục trong ứng dụng/người trợ giúp, được gọi là Spree và đặt mã từ Ryan Bigg vào một tệp được gọi là base_helper.rb –

+12

@JoaoPereira nếu bạn gọi base_helper.rb, spree sẽ không tải base_helper.rb gốc. Bạn sẽ phải sao chép/dán mọi chức năng, để chức năng hoạt động bình thường. Nhưng nếu bạn gọi base_helper_decorator.rb, nó hoạt động. – alexandrecosta