Как написать оператор if в таблице ruby erb html - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь написать оператор if в таблице, чтобы получить одно изображение, если изображение не существует в базе данных. Я могу получить оба изображения по отдельности, но не с помощью оператора if. Что я делаю не так в моем коде.

<h1>Won Auctions</h1>
<br>

<table class= "table table-hover" >
  <thead>
    <tr>
        <th>Name</th>
        <th>Price</th> 
        <th>End Date</th>
        <th>Seller</th>
        <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% won.each do |a| %>
      <tr>
        <td><%= 
        if a.image.exists? %>
          <%  image_tag(a.image, width:100) %>
        else
          <% image_tag("No_image.jpg", width:100) %>
          <% end %>
         %><td>
        <td><%= a.name %></td>
        <td><%= number_to_currency(a.highest_bid) %></td>
        <td><%= a.auction_end_time %></td>
        <td><%= a.seller.email %></td>

      </tr>
    <% end %>
  </tbody>
</table>

<br>

1 Ответ

2 голосов
/ 27 апреля 2020

else также должен быть в теге ERB.

Кроме того, вам нужно переключить использование <%= и <%. Поскольку вы хотите вывести теги изображений, используйте <%= с image_tag. Но вы не выводите результат условия if, используйте <% с if, else и end.

<td>
  <% if a.image.exists? %>
    <%= image_tag(a.image, width:100) %>
  <% else %>
    <%= image_tag("No_image.jpg", width:100) %>
  <% end %>
<td>

Чтобы упростить представление, я бы рассмотрел добавление вспомогательный метод для вашей a модели (я полагаю, это Auction) и просто вызовите этот вспомогательный метод в представлении вместо наличия условия в представлении:

# in the model
FALLBACK_IMAGE_PATH = 'No_image.jpg'

def image_path_with_fallback
  a.image.exists? ? a.image : FALLBACK_IMAGE_PATH
end

# in the view
<td><%= image_tag(a.image_path_with_fallback, width:100) %><td>
...