Ç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ş
我相信你现在要求的是:
# 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
希望这有助于其他人寻找相同的解决方案.
鉴于文档:
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布局中是不可能的。