我有一个简单的模板系统,它在渲染模板时调用show_me
在我的模型的不同类(有点小部件)中定义的方法。这些小部件最初将 html 作为字符串返回。所以在我的erb中,我有这样的想法。
<% @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 时遗漏了一些东西。
任何想法如何解决这个问题?也欢迎对整体设计提出任何建议:)