2015-04-30 3 views
3

Я повторяю объект модели @products (в настоящее время 3 в БД), но мне также нужно применять различные стили для каждого из объектов, возвращаемых в моем представлении.Iterate over rails object and array

Вот мой текущий код в моем page_controller.rb получить только первые 3 продукта:

@products = Product.where(id: 1..3) 

На мой взгляд index.html.erb:

<div class="row pricing-table"> 
    <% @products.each do |p| %> 
    <div class="col-md-4"> 
     <div class="panel <%= custom-style %>"> 
     <div class="panel-heading"><h3 class="text-center"><%= p.title %></h3></div> 
      <div class="panel-body text-center"> 
      <p class="lead" style="font-size:40px"><strong><%= number_to_currency(p.price, precision: 0) %>/month</strong></p> 
      </div> 
      <ul class="list-group list-group-flush text-center list-no-bullets"> 
      <%= p.description.html_safe %> 
      </ul> 
      <div class="panel-footer"> 
      <%= link_to("Request Quote", "/quote_forms/new", class: "btn btn-lg btn-block btn-danger-override") %> 
      </div> 
     </div> 
    </div> 
    <% end %> 
</div> 

сейчас , то, что я пытаюсь сделать, это добавить пользовательский стиль к 4-й строке div. (я поместил в синтаксисе Еврорадио, так что вы можете увидеть, где я говорю о)

Итак, я добавил массив классов стилей CSS для page_controller.rb:

@style = ["danger", "info", "success"] 

в надежде, что есть способ, чтобы получить 4-й линии div элемент быть:

<div class="panel panel-danger"> 

в первой итерации, то во второй итерации:

<div class="panel panel-info"> 

и так далее.

Как бы я мог это сделать?

+0

Да, отметил. Мне действительно нужно только получить первые 3 из моей БД для этой конкретной страницы. – Godzilla74

ответ

3

Используйте each_with_index перебирать продукты, а затем использовать индекс, чтобы получить соответствующее имя стиля:

<div class="row pricing-table"> 
    <% @products.each_with_index do |p, p_index| %> 
    <div class="col-md-4"> 
     <div class='panel <%= "panel-#{@style[p_index % @style.size]}" %>'> 
     <div class="panel-heading"><h3 class="text-center"><%= p.title %></h3></div> 
      <div class="panel-body text-center"> 
      <p class="lead" style="font-size:40px"><strong><%= number_to_currency(p.price, precision: 0) %>/month</strong></p> 
      </div> 
      <ul class="list-group list-group-flush text-center list-no-bullets"> 
      <%= p.description.html_safe %> 
      </ul> 
      <div class="panel-footer"> 
      <%= link_to("Request Quote", "/quote_forms/new", class: "btn btn-lg btn-block btn-danger-override") %> 
      </div> 
     </div> 
    </div> 
    <% end %> 
</div> 
+2

, если '@ products.size' больше, чем' @ style.size', '@style [p_index]' будет возвращать 'nil' ... Вам нужно использовать modulo в этом случае:' @style [p_index% @style .size] ' – MrYoshiji

+0

Отредактировал свой ответ. Thats @MrYoshiji – Adnan

+0

Удивительный! Спасибо за коллективную работу! Работает как шарм, и я узнал что-то новое: '.each_with_index' – Godzilla74