【问题标题】:Rendering content inside a partial via =yield通过=yield渲染部分内容
【发布时间】:2011-11-03 06:14:25
【问题描述】:

我正在使用 ruby​​ on rails 创建一个应用程序,其中有一个 items/_item.html.erb。部分内部是一个 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

编辑:

我发现是 :collection 散列导致无法插入块。

这两条代码都可以工作:

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

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

这意味着如果我做一个 .each 我可以完成我想要的,但这将是丑陋的代码。有谁知道解决这个问题的方法吗?

【问题讨论】:

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


    【解决方案1】:

    content_for 在这种情况下应该可以正常工作。这是我刚刚在本地仔细检查的代码。

    somewhere.html.erb

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

    _item.html.erb

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

    【讨论】:

    • 你是如何解决这个问题的?我已经尝试在渲染的上方、下方和周围设置 content_for 代码,但我仍然看不到部分渲染的内容。是因为我也在使用集合吗?
    • 在 _item.html.erb 我们可以使用 content_for 代替 yield &lt;% content_for :foobar if content_for? :foobar %&gt;
    • 您是否有机会提供一个关于渲染调用的快速示例?
    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多