2010-09-27 10 views
7

Podobno, ActionController::Base.helpers działa jak proxy dla uzyskiwania dostępu do pomocy poza widokami. Jednak wiele z tych metod nie określono polegać na zmiennych kontrolera i jestem w stanie z powodzeniem połączenia:AssetTagHelper :: image_path poza widokami

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

Kopanie w źródle widzę compute_asset_host sposób próbuje uzyskać dostęp config.asset_host ale config jest nil.

Jak skutecznie zadzwonić pod numer image_path z widoków z zewnątrz?

+0

Chciałbyś poznać to samo! –

Odpowiedz

0

This solution, opublikowane przez Mason Jones, działa dla mnie.

W kontrolerze aplikacji:

def self.tag_helper 
    TagHelper.instance 
end 

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

Następnie można wykonać następujące czynności takie rzeczy, czy cokolwiek innego, czego potrzebujesz.

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 

Tworzysz instancję Singeltona TagHelpera w aplikacji ApplicationController. Daje to pomocników, gdziekolwiek ich potrzebujesz. Wyjaśnia to w swoim poście.

Używam tego również do rozszerzenia moich modeli (w celu stworzenia bardziej elastycznego pomocnika image_tag, który zwraca domyślny obraz, jeśli nie ma obrazu - np. Osoba.small_image jest zmienną instancji modelu osoby, która używa tag_helper) . Aby to zrobić, umieściłem ten sam kod w inicjalizatorze Patch Monkey, który rozszerza ActiveRecord :: Base. Następnie wywołuję ActiveRecord :: Base.tag_helper z moich modeli. To trochę nieporządne, ale jestem nowy na szynach. Prawdopodobnie jest to czystszy sposób.

Nadzieję, że pomaga.

12

Korzystając view_context dostęp do tych metod pomocniczych, które są dostępne w widoku.

Możesz zadzwonić pod numer image_path w ten sposób ze sterownika.

view_context.image_path "my_image.png" 
+1

Działa to naprawdę dobrze! Idealny! –

Powiązane problemy