传递参数以在Rails 3中产生(或者可能吗?)

Çağ*_*daş 6 yield erb content-for ruby-on-rails-3

我正在尝试使用yield和创建动态内容content_for.基本上我有一堆布局.我不想为每个布局创建一堆视图.我想在需要时渲染视图部件.对于代码的不同部分,它是可以的.但我有相同的部分与不同的内容有问题.

在我的 application.html.erb

<%= yield %>
<%= yield :name_section %>
Run Code Online (Sandbox Code Playgroud)

在我的show.html.erb拥有;

<% content_for :name_section do %>
    <b>Name:</b>
    <%= @post.name %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这是个问题;

如果我想要多个具有不同内容的name_section,该怎么办?我的意思是; 我想:name_section在不同的内容中放置不同的地方.

对于前

<table>
  <tr>
    <td>
      <%= yield :name_section %>
    </td>
  </tr>
  <tr>
    <td>
      <%= yield :name_section %>
    </td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢.Çağdaş

Fuz*_*ulz 6

我相信你现在要求的是:

# The template
<%= render layout: "my_layout" do |customer| %>
  Hello <%= customer.name %>
<% end %>

# The layout
<html>
  <%= yield Struct.new(:name).new("David") %>
</html>
Run Code Online (Sandbox Code Playgroud)

来自:http: //api.rubyonrails.org/classes/ActionView/Helpers/RenderingHelper.html#method-i-_layout_for

希望这有助于其他人寻找相同的解决方案.


for*_*ker 2

鉴于文档:

http://api.rubyonrails.org/classes/ActionView/Helpers/RenderingHelper.html#method-i-_layout_for

以及该方法的源代码(您可以在那里浏览):

def _layout_for(*args, &block)
  name = args.first

  if block && !name.is_a?(Symbol)
    capture(*args, &block)
  else
    super
  end
end
Run Code Online (Sandbox Code Playgroud)

您所要求的在yield布局中是不可能的。