Rails Views: Как передать переменную в частичную разметку? - PullRequest
1 голос
/ 21 августа 2010

В одном из моих представлений я применяю макет к блоку кода:

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

Это не сработало и вместо этого привело к двойной визуализации всего блока кода.

Какой лучший способ решить эту проблемупроблема

Ответы [ 2 ]

1 голос
/ 21 августа 2010

Понял.

Из 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 голосов
/ 21 августа 2010

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

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