2010-09-27 30 views
7

Giả sử, ActionController::Base.helpers hoạt động như một proxy để truy cập người trợ giúp bên ngoài chế độ xem. Tuy nhiên rất nhiều các phương pháp xác định có dựa trên các biến điều khiển và tôi không có khả năng thành công cuộc gọi:AssetTagHelper :: image_path lượt xem bên ngoài

ActionController::Base.helpers.image_path("my_image.png") 
>> TypeError Exception: can't convert nil into String 

Đào tại nguồn tôi thấy compute_asset_host phương pháp đang cố gắng truy cập vào config.asset_host nhưng confignil.

Làm cách nào tôi có thể gọi thành công image_path từ chế độ xem bên ngoài?

+0

Muốn biết điều tương tự! –

Trả lời

0

This solution, được đăng bởi Mason Jones, phù hợp với tôi.

Trong điều khiển ứng dụng của bạn:

def self.tag_helper 
    TagHelper.instance 
end 

class TagHelper 
    include Singleton 
    include ActionView::Helpers::TagHelper 
    include ActionView::Helpers::AssetTagHelper 
end 

Sau đó, bạn có thể làm các loại sau đây của các điều, hoặc bất cứ điều gì khác mà bạn cần.

active_scaffold :mything do |config| 
    config.columns = [:name, :number, :active, :description] 
    config.update.link.label = tag_helper.image_tag('document_edit.png', :width => "30") 
    config.delete.link.label = tag_helper.image_tag('document_delete.png', :width => "30") 
    config.show.link.label = tag_helper.image_tag('document.png', :width => "30") 
    list.sorting = {:name => 'ASC'} 
end 

Bạn đang tạo một thể hiện Singelton của TagHelper trong ApplicationController của bạn. Điều này cung cấp cho bạn những người giúp đỡ bất cứ nơi nào bạn cần chúng. Ông giải thích nó trong bài viết của mình. Ngoài ra, tôi sử dụng điều này để mở rộng mô hình của mình (để tạo ra một trình trợ giúp image_tag linh hoạt hơn trả về một hình ảnh mặc định nếu không có hình ảnh - ví dụ person.small_image là một biến mẫu của mô hình người, sử dụng tag_helper) . Để làm điều đó tôi đã đặt cùng một mã trong một bộ khởi tạo Khỉ Patch mở rộng ActiveRecord :: Base. Sau đó tôi gọi ActiveRecord :: Base.tag_helper từ bên trong các mô hình của mình. Đây là một chút lộn xộn, nhưng tôi mới đến đường ray. Có lẽ là một cách sạch hơn.

Hy vọng điều đó sẽ hữu ích.

12

Sử dụng view_context để truy cập những phương pháp helper mà có sẵn trong giao diện.

Bạn có thể gọi image_path như thế này từ bộ điều khiển.

view_context.image_path "my_image.png" 
+1

Điều này hoạt động thực sự tốt! Hoàn hảo! –

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