ruby erb html table 中的if语句怎么写

How to write if statement in ruby erb html table

我正在尝试在 table 中编写一个 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>

else 也需要在 ERB 标签中。

此外,您需要切换<%=<%的用法。因为要输出图像标签,所以使用 <%=image_tag。但是你不输出 if 条件的结果,使用 <%if, elseend.

<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>