在我的一个视图中,我将布局应用于代码块:
# In app/views/sessions/new.html.erb
<% render :layout => 'home/shadow_box' do %>
#... code for sign in form here
<% end %>
布局是一个div,四面都有png阴影。
由于我在我的网站上使用此布局,我想将一个变量传递给指定阴影div的宽度的布局。我尝试在代码块中使用内容:
# In app/views/sessions/new.html.erb
<% render :layout => 'home/shadow_box' do %>
<% content_for :box_width %>640<% end %>
#... code for sign in form here
<% end %>
# In app/views/home/_shadow_box.html.erb
<div class="shadow-one" style="width:<%= yield :box_width %>;">
<div class="corner-a"></div>
<div class="corner-b"></div>
<div class="shadow-two">
<div class="shadow-three">
<div class="shadow-four">
<%= yield %>
</div>
</div>
</div>
</div>
这不起作用,而是导致整个代码块的双重渲染。
解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
想出来。
来自API:“您还可以在一个布局中多次生成并使用块参数来区分这些部分。”
解决方案:
# In app/views/sessions/new.html.erb
<% render :layout => 'home/shadow_box' do | section | %>
<%- case section when :box_width -%>
#width goes here. I.e., 640px
<%- when :content -%>
#code block goes here
<% end -%>
<% end %>
#In app/views/home/_shadow_box.html.erb
<div class="shadow-one" style="width:<%= yield :box_width %>;">
<div class="corner-a"></div>
<div class="corner-b"></div>
<div class="shadow-two">
<div class="shadow-three">
<div class="shadow-four">
<%= yield :content %>
</div>
</div>
</div>
</div>
答案 1 :(得分:0)
首先,您需要了解layouts
和partials
之间的区别。部分通常来自视图,但如果您使用的是ajax,也可以从控制器中使用。布局几乎总是在控制器中使用。
首先在共享文件夹(例如application /)中创建一个文件,并在此文件夹中放置一个文件,无论您想要什么,但它将包含您希望包含在整个站点中的材料。然后,当您将变量传递给partial时,它会在partial中作为局部变量调用。对于部分内容,您无需说render :partial =>
,只需添加render 'application/some_file'
所以从你想要的观点来看:
<%= render 'application/your_file', :div_size => '600' %>
然后从文件夹中的部分文件application/your_file.html.erb
执行此操作:
<div style="width:<%= div_width %>px;">
content
</div>