У меня есть простая система шаблонов, которая вызывает метод show_me
, определенный в различных классах моей модели (вроде виджетов) при рендеринге шаблона. Эти виджеты изначально возвращали HTML в виде строки. Так что в моем эрбе есть нечто подобное.
<% @template.widgets.each do |widget| %>
<%= widget.show_me %>
<% end %>
По мере усложнения представлений виджетов я начинаю использовать партиалы для их рендеринга, вызывая метод визуализации ActionView::Base
из моих виджетов (пожалуйста, не бросайте пока:)
def show_me
# ... specific calculations and other magic.
ActionView::Base.new(MyApp::Application.config.view_path).render(:partial => "widgets/weather_widget", :locals => {:data => data, :settings => settings})
end
Итак, это работает как талисман (на самом деле ...), но когда я хочу использовать помощники внутри определенной части виджета (например, widgets/_weater_widget.html.erb
), они не работают. например. javascript_tag
поднимает
can't convert nil into String
actionpack (3.0.0) lib/action_view/helpers/asset_tag_helper.rb:790:in `join'
actionpack (3.0.0) lib/action_view/helpers/asset_tag_helper.rb:790:in `rails_asset_id'
actionpack (3.0.0) lib/action_view/helpers/asset_tag_helper.rb:813:in `rewrite_asset_path'
actionpack (3.0.0) lib/action_view/helpers/asset_tag_helper.rb:742:in `compute_public_path'
actionpack (3.0.0) lib/action_view/helpers/asset_tag_helper.rb:256:in `javascript_path'
actionpack (3.0.0) lib/action_view/helpers/asset_tag_helper.rb:822:in `javascript_src_tag'
actionpack (3.0.0) lib/action_view/helpers/asset_tag_helper.rb:362:in `block in javascript_include_tag'
actionpack (3.0.0) lib/action_view/helpers/asset_tag_helper.rb:362:in `collect'
actionpack (3.0.0) lib/action_view/helpers/asset_tag_helper.rb:362:in `javascript_include_tag'
Мне кажется, что я что-то упускаю при создании ActionView :: Base.
Есть мысли, как это решить? Также приветствуются любые предложения по общему дизайну:)