2013-12-06 2 views
0

Я новичок в рельсах. У меня есть этот блок, на мой взгляд afrikaans.html.erbОказание частичного внутри блока

<% @afrikaans.each do |course| %> 
    <div class="course"> 
    <h3 class="course-name"><%= link_to course.name, course.url %></h3> 
    <% if I18n.locale == I18n.default_locale %> 
    <p class="course-description_en"><%= course.description_en %></p> 
    <% else %> 
    <p class="course-description_se"><%= course.description_se %></p> 
    <% end %> 

    <% if course.youtube_url.blank? == false %> 
     <p><%= raw ApplicationHelper.youtube_embed(course.youtube_url) %></p> 
    <% end %>  
    <% if course.language_id == 1 %> 
    <p>&nbsp; <%= image_tag("eng.png", :alt => "England", :class =>"round") %></p> 
    <% else %> 
    <p>&nbsp; <%= image_tag("swe.png", :alt => "Sweden", :class =>"round") %></p> 
    <% end %> 

    <% if ApplicationHelper.active_link?(course.url) == false %> 
     <td><%= I18n.t('home.broken_link') %></td> 
    <% end %> 

    <p><%= course.nbr_of_votes %> <%= I18n.t('home.votes') %></p> 
    </tr> 
<% end %> 

У меня также есть еще один файл swahili.html.erb с такой же структурой. Я хотел бы реализовать что-то вроде этого

afrikaans.html.erb

<% @afrikaans.each do |course| %> 
<%= render 'shared/partial' %> 
<% end %> 

Так что я тоже могу иметь

swahili.html.erb

<% @swahili.each do |course| %> 
<%= render 'shared/partial' %> 
<% end %> 

Парциальное будет содержать часть блока. Я пробовал это, но он не работает. Мой вопрос в том, что это возможно даже в рельсах, и если да, то в чем проблема. Какие параметры у меня есть, если это невозможно, чтобы я мог избежать повторения, поскольку два файла имеют одну и ту же структуру?

Обновление. Этот был разработан для меня. Я только необходимо добавить :course => course на блоке, так что мои взгляды становится чем-то вроде

<% @afrikaans.each do |course| %> 
    <%= render 'shared/course_body', :course => course %> 
<% end %> 

Конечно, я не назвал мое частичное «частичное». Это просто вопрос. Благодаря одному ответу Александра Александровича Панасюка.

+0

его возможно. Какая ошибка вы получаете с кодом? – ben

+0

Первое, что нужно проверить, это частичный файл: '_partial.html.erb', то есть имя файла. – vee

+0

Это очень хорошо. Что значит «не работает»? Вы получаете ошибку? –

ответ

2

Просто создайте общий каталог в пределах вашего приложение/виды путь. И создать файл _partial.html.erb внутри совместно:

<div class="course"> 
    <h3 class="course-name"><%= link_to course.name, course.url %></h3> 
    <% if I18n.locale == I18n.default_locale %> 
    <p class="course-description_en"><%= course.description_en %></p> 
    <% else %> 
    <p class="course-description_se"><%= course.description_se %></p> 
    <% end %> 
    <% if course.youtube_url.blank? == false %> 
     <p><%= raw ApplicationHelper.youtube_embed(course.youtube_url) %></p> 
    <% end %>  
    <% if course.language_id == 1 %> 
    <p>&nbsp; <%= image_tag("eng.png", :alt => "England", :class =>"round") %></p> 
    <% else %> 
    <p>&nbsp; <%= image_tag("swe.png", :alt => "Sweden", :class =>"round") %></p> 
    <% end %> 
    <% if ApplicationHelper.active_link?(course.url) == false %> 
     <td><%= I18n.t('home.broken_link') %></td> 
    <% end %> 
    <p><%= course.nbr_of_votes %> <%= I18n.t('home.votes') %></p> 
    </tr> 

Затем сделать ваш парциальное в afrikaans.html.erb подобное:

<% @afrikaans.each do |course| %> 
    <%= render 'shared/partial', :course => course %> 
<% end %> 

или в swahili.html .erb:

<% @swahili.each do |course| %> 
    <%= render 'shared/partial', :course => course %> 
<% end %> 
0

Это, безусловно, возможно, и, как правило, хорошая идея.

В будущем было бы неплохо, если бы вы могли публиковать фактические результаты и/или сообщения об ошибках, которые вы получите, что очень помогло бы при попытке помочь вам.

Это, я думаю, вам нужно передать переменную course в вашу сторону. Изменение

<%= render 'shared/partial' %> 

в

<%= render 'shared/partial', :course => course %> 

Partials не имеют доступа к локальным переменным в других обертонов. В этом смысле вы можете думать о каждом частичном как отдельные методы в одном экземпляре объекта.

0
<%= render 'shared/partial', locale: 'swahili', course: course %> 

Вы будете иметь местный Варс «языковой» и «курс» в вашем частичном наборе к «суахили» и @course соответственно.Кроме того, я бы посоветовал назвать частичные части более значимыми, например «курс».

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