在部分via = yield内渲染内容

时间:2011-08-24 23:43:20

标签: ruby-on-rails ruby-on-rails-3 partials

我正在使用ruby在rails上创建一个应用程序,其中有一个项目/ _item.html.erb。 partial内部是一个yield语句,所以我可以根据需要添加额外的内容。在这种情况下,我想根据视图调用部分向项目添加特定按钮。

这是我尝试过的,它渲染部分,但它不会渲染块:

_item.html.erb

<%= yield if block_given? %>
<div>
  <%= item.name %>
</div>

someview.html.erb

...

<% render(:partial => 'items/item', :collection => current_user.items do %>
  <%= "HELLO" %>      
<% end %>

...

我也尝试过使用content_for和其他一些东西但没有成功。有没有办法能够在部分通过收益率内呈现特定内容?我目前正在使用Rails3

编辑:

我发现它是:集合哈希使得无法插入块。

这两段代码都有效:

<%= render :layout => 'items/item' do %>
      Hello world      
<% end %>

<%= render :layout => 'items/item', :locals => {:item => current_user.items.first} do %>
  Hello world      
<% end %>

这意味着,如果我做了一个。每次我可以完成我想要的东西,但这将是丑陋的代码。有人知道解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

在这种情况下,

content_for应该可以正常工作。这是我在本地双重检查的代码。

<强> somewhere.html.erb

<% content_for :foobar do %>
  fubar
<% end %>

<强> _item.html.erb

<% if content_for? :foobar %>
  <%= yield :foobar %>
<% end %>