2014-02-03 3 views
0

я следующий HTML кодRefactor повторяющийся вид HTML в каждую петлю для Руби

<div class="col-xs-1"> 
    <img src="/assets/X.jpg" class="img-responsive" alt="X"> 
    <h6>X</h6> 
</div> 

<div class="col-xs-1"> 
    <img src="/assets/Y.jpg" class="img-responsive" alt="Y"> 
    <h6>Y</h6> 
</div> 

<div class="col-xs-1"> 
    <img src="/assets/Z.jpg" class="img-responsive" alt="Z"> 
    <h6>Z</h6> 
</div> 
... 

Как вы можете видеть, что есть тонна избыточности (тем более, что это на самом деле повторение 10+ раз не только 3 я здесь). Я пытаюсь продумать, как сделать что-то подобное в СУШЕ каждом цикле, но я немного затруднился.

Первоначально я думал, что просто объявить в контроллере для этой точки зрения:

@images = ["X", "Y", "Z"] 

А потом в представлении сделать

<% @images.each do |image| %> 
<div class="col-xs-1"> 
    <img src="/assets/#{image}.jpg" class="img-responsive" alt="#{image}"> 
    <h6>"#{image}"</h6> 
</div> 
<% end %> 

Но этот синтаксис не должен быть прав, так как все изображения показывают сломанной. Любые мысли о том, что я делаю неправильно?

Кроме того, если это оказалось не очень эффективным способом рефакторинга, я очень открыт для предложений!

ответ

0

Вы ожидаете, что интерполировать #{image}, но этот код на картинке src, alt атрибуты - это просто текст, а не рубин. То же самое относится к тексту в теге h6.

Для вывода их значений необходимо использовать erb scriplets <%=...%>.

Обновление вида кода следующее:

<% @images.each do |image| %> 
<div class="col-xs-1"> 
    <img src="<%= "/assets/#{image}.jpg" %>" class="img-responsive" alt="<%= "#{image}" %>"> 
    <h6><%= "#{image}" %></h6> 
</div> 
<% end %> 
+0

Совершенная, спасибо! – james

+0

быстрый вопрос, я экстраполирую правила интерполяции из вашего ответа и из того, что знаю ... теперь скажем, что я хочу, чтобы изображение ссылалось на заранее заданный путь. Например, если изображение получило название «Голубое небо», путь должен быть «photographer_the_blue_sky_path». Поэтому я пишу '" class = "thumbnail"> ', но это создает «ожидающая») ошибка. Вы можете легко понять, что не так? – james

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