2010-08-20 5 views
1

В одном из моих взглядов, которые я применить макет к блоку кода:Rails Views: Как передать переменную частичной компоновке?

# 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> 

Это не сработало, и вместо того, чтобы в результате двойной визуализации всего кодового блока.

Каков наилучший способ решения этой проблемы?

ответ

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> 
0

Прежде всего вам нужно знать разницу между layouts и partials. Частицы, как правило, относятся к виду, но могут также использоваться с контроллера, если вы используете ajax. Макеты почти всегда используются в контроллере.

Сначала создайте файл в общей папке, такой как приложение /, и в этой папке поместите файл, как угодно, но он будет содержать материал, который вы хотите включить на свой сайт. Затем, когда вы передаете переменную частичной, она вызывается в частичной как локальная переменная. Кроме того, с частичными вам не нужно говорить 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> 
+0

Я понимаю разницу btwn макетов и частичными ... Я не говорю о том, какие макеты указанного глобально для всего действия. Частичное не включает в себя мои потребности здесь, потому что у меня есть контейнер (несколько divs, чтобы сделать теневой контейнер), в который я хочу бросить все, будь то блок кода или даже частичный (т. Е. Render 'inventoryories/show' ,: layout => 'shadow_box'). – telecasterrok

Смежные вопросы