5

Tôi đang nâng cấp ứng dụng Rails 3 lên 3.2 và thiết lập đường dẫn nội dung. Nó tuyệt vời cho css/js nhưng tôi không thực sự thấy điểm trong việc sử dụng nó cho hình ảnh, và tiếc là tôi có css với một tấn tài liệu tham khảo /images/*.png và tương tự.Vô hiệu hóa đường dẫn nội dung Rails 3.1 chỉ cho hình ảnh?

Có cách nào để vô hiệu hóa đường ống nội dung chỉ dành cho hình ảnh để image_tag("x.png") sẽ quay lại trả lại <img src="/images/x.png"> thay vì <img src="/assets/x.png">? Cảm ơn!

Trả lời

0

Hãy xem đá quý này: https://github.com/spohlenz/digestion, bạn nên làm những gì bạn cần :).

Nếu không, bạn có thể di chuyển nội dung bạn không muốn đưa vào đường dẫn nội dung từ ứng dụng/nội dung trở lại công khai (ví dụ: công khai/hình ảnh). Tất cả mọi thứ sẽ làm việc như bạn mong đợi mà không cần một viên ngọc.

4

Bạn có thể khỉ vá ActionView :: Base, thử điều này trong đường ray console:

helper.image_path "foo" #=> "/assets/foo" 

module OldImagePath 
    def image_path(source) 
    asset_paths.compute_public_path(source, 'images') 
    end 
    alias_method :path_to_image, :image_path 
end 
ActionView::Base.send :include, OldImagePath 

helper.image_path "foo" #=> "/images/foo" 

Bạn có thể đặt điều này trong một initializer ví dụ. Theo mặc định ActionView :: Base bao gồm ActionView :: Helpers :: AssetTagHelper và Sprockets :: Helpers :: RailsHelper mà cả hai đều định nghĩa image_path nhưng sau này được ưu tiên. Tôi bao gồm mô-đun của riêng tôi được ưu tiên hơn tất cả chúng (mã bên trong được lấy từ ActionView :: Helpers :: AssetTagHelper).

Mặc dù cũng có ý nghĩa khi sử dụng đường dẫn nội dung cho hình ảnh. Họ nhận được hash sum trong tên tập tin của họ để họ có thể được lưu trữ mãi mãi ở phía khách hàng mà không yêu cầu máy chủ cho dù tập tin đã được thay đổi.

+0

Có ai xác nhận điều này có hiệu quả không? Tôi đã kết thúc việc cắn viên đạn và ôm lấy đường ống tài sản cho hình ảnh. – swrobel

+0

Cảm ơn bạn @Semyon nó hoạt động như một sự quyến rũ !! – wael34218

+0

Cảm ơn! Tôi đã sử dụng kỹ thuật này để giữ AssetNotPrecompiledError khỏi việc tạo ra lỗi máy chủ 500 trong quá trình sản xuất, nếu xảy ra lỗi khi giải quyết đường dẫn hình ảnh qua đường dẫn nội dung. Trong ghi đè của tôi của image_path, tôi chỉ cần gọi là 'siêu (nguồn)', nhưng thêm một khoản cứu giúp ghi lại lỗi và trả về "#" cho đường dẫn. Tôi đặt dòng 'ActionView :: Base.send' vào trình khởi tạo, như bạn đã đề xuất. Hoạt động hoàn hảo! –

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