Как отобразить изображение в виде, если переменная отрицательная

0

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

<% @businesses.each do |b| %>
<td>
 <%= b.value %>
</td>

У меня 3 изображения:

green-up.png
red-down.png
circle.png

Я хочу показать зеленую стрелку вверх, если b.value положительный, круг, если он равен 0, и красная стрелка вниз, если она отрицательная.

Пример, если положительный:

<td>
 <img src='green-up.png'>12
</td>
<td>
 <img src='circle.png'>0
</td>

Я создаю отчет, поэтому есть много таких проверок. Есть ли лучший способ, чем использовать целую кучу операторов if?

Теги:

3 ответа

5
Лучший ответ

Хорошее место для начала было бы помощником.

# app/helpers/businesses_helper.rb
module BusinessesHelper
  def business_icon_for(value)
    if value > 0
      image_tag 'green-up.png', alt: 'Positive'
    elsif value == 0
      image_tag 'circle.png', alt: 'No change'
    else
      image_tag 'red-down.png', alt: 'Negative'
    end
  end
end

Тогда, на ваш взгляд:

<% @businesses.each do |b| %>
  <td>
    <%= business_icon_for b.value %>12
  </td>
  <td>
    <%= business_icon_for b.value %>0
  </td>
<% end %>
1

Вы можете создать метод экземпляра в своей Business модели:

def image
  return 'green-up.png' if value > 0
  return 'red-down.png' if value < 0
  'circle.png'
end

И тогда, на ваш взгляд

<img src='<%= b.image %>'>
  • 1
    Я не согласен с тем, что модель должна когда-либо знать что-либо об изображениях или других ресурсах, если вы не работаете с пользовательскими загрузками (например, через что-то вроде Paperclip или Carrierwave).
0

Вы можете справиться с этим, просто изменив свой объект,
Просто добавьте атрибут в имя объекта bean- образа вместе со значением
Название изображения, которое вы можете установить в bean, при настройке значения для bean-компонента на основе значения (отрицательный, нулевой или положительный).

Тогда вам не нужно делать какой-либо код для выбора правильного изображения,
просто перебирайте список сущностей и добавьте ниже код в html.

<td>
  <img src='<%= b.image %>'><%= b.value %>
</td>
  • 0
    Я не согласен с тем, что модель должна когда-либо знать что-либо об изображениях или других ресурсах, если вы не работаете с пользовательскими загрузками (например, через что-то вроде Paperclip или Carrierwave).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню