Tôi muốn sử dụng những người trợ giúp quen thuộc của đường ray, nhưng có chức năng thay đổi một chút. Con đường tôi nhìn thấy nó, tôi muốn để có thể làm điều gì đó như:Ghi đè người giúp đỡ đường ray với quyền truy cập vào số
module AwesomeHelper
#... create alias of stylesheet_link_tag to old_stylesheet_link_tag
def stylesheet_link_tag(*args)
if @be_awesome
awesome_stylesheet_link_tag *args
else
old_stylesheet_link_tag *args
end
end
end
Con đường tôi nhìn thấy nó, tôi có ba lựa chọn:
- khỉ vá: Mở lại các module ray helper . Nếu đội đường ray bao giờ thay đổi tên của mô-đun trợ giúp của họ, mã của tôi trở thành một nguồn của sự giòn. Không thể vượt qua, nhưng không lý tưởng.
- Sử dụng các tên phương thức khác nhau: Cố gắng bám vào giao diện đường ray chung có thể là sự sụp đổ của tôi. Những thay đổi của tôi có thể trở thành một nguồn gây nhầm lẫn cho các nhà phát triển khác
- Phương pháp tách (mới): Không chắc chắn điều này có hiệu quả hay không hoặc sẽ có những hạn chế tương tự như 1. Sẽ nghiên cứu điều này, nhưng điều này có thể là tốt điểm khởi đầu.
Vì vậy, câu hỏi ở đây là, tôi có bị mắc kẹt với một trong các giải pháp phụ tối ưu này không, hoặc có cách nào khác mà tôi chưa xem xét không? Nếu tôi đi cho tùy chọn 3, có cách nào để làm điều đó mà không trực tiếp giải quyết các mô-đun trợ giúp đường ray?
(Lưu ý:. Tôi đã gỡ bỏ bối cảnh, vì nó cho biết thêm gì cho câu hỏi)
Bạn biết những gì ... điều đó thật điên rồ, tôi đang cố gắng đánh giá trí não của mình để giải thích tại sao Tôi nghĩ nó sẽ không hoạt động! Tôi sẽ thử nó tối nay, và nếu nó hoạt động, tôi sẽ có những từ nghiêm trọng với bộ não của tôi, có lẽ liên quan đến một bức tường gạch. Sau khi, tất nhiên, chấp nhận câu trả lời của bạn ...: D – user208769
@ user208769 Hehehe. Thật tuyệt vời. Tốt nhất là tôi hiểu, các phương pháp ghi đè theo cách này thường thích hợp hơn trong mọi trường hợp. [Class # tổ tiên] (http://ruby-doc.org/core-1.9.3/Module.html#method-i-ancestors) có thể thực sự hữu ích trong việc tìm ra một vị trí tốt trong đường dẫn phương pháp tra cứu để tấn công phương pháp gửi đi (hoặc nơi mô-đun tùy chỉnh của bạn có ghi đè cần được đưa vào hiệu quả tốt nhất). – Cade
Cái gì? :) Bạn phải đùa! Đây là một hình ảnh khổng lồ! Theo cách của bạn, bạn phải bao gồm bạn helper trong MỌI lớp bao gồm AssetTagHelper. Thời gian trôi qua và bạn hoặc người khác có thể quên mất việc cần bao gồm bản vá của bạn. Bạn chỉ cần bao gồm AssetTagHelper và bắt đầu tự hỏi: tại sao trang web của tôi bây giờ trông khác nhau? Thật tốt khi bạn và người tạo bản vá là cùng một người. Nhưng nếu không thì sao? – jdoe