如何在rails中的html.erb文件中正确添加if语句?

时间:2018-02-15 14:45:28

标签: ruby-on-rails ruby-on-rails-5

在渲染索引页面时,我想从其他表中收集POC和模型类型的值。如果这些字段在其他表中,它就可以正常工作。问题是如果该字段为空则会中断。我决定添加一个if语句,并且在ID上找不到错误。

<h1>Hardwares</h1>

<table>
  <thead>
    <tr>
      <th>Serial Number</th>
      <th>Model Number</th>
      <th>Model Type</th>
      <th>Location</th>
      <th>POC</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @hardwares.each do |hardware| %>
      <tr>
        <td><%= hardware.serialnumber %></td>
        <td><%= hardware.modelnumber %></td>
        <% if Modeltype.find(hardware.modeltype_id) != nil %>
          <td><%= Modeltype.find(hardware.modeltype_id).mtype%></td>
        <% else %>
          <td>hi</td>
        <% end %>
        <td><%= hardware.location %></td>
        <td><%= Poc.find(hardware.poc_id).name%></td>
        <td><%= link_to 'Show', hardware %></td>
        <td><%= link_to 'Edit', edit_hardware_path(hardware) %></td>
        <td><%= link_to 'Destroy', hardware, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<a href="hardwares/new" class="button round">New Hardware</a>

问题似乎是if语句,if语句的语法是否正确?

我也尝试过:

<% if Modeltype.find(hardware.modeltype_id) == true %>
  <td><%= Modeltype.find(hardware.modeltype_id).mtype%></td>
<% else %>
  <td>hi</td>
<% end %>

1 个答案:

答案 0 :(得分:1)

在Ruby中,空值为nil,而不是nill。并且每个不是falsenil的对象都是真实的。因此,您无需明确检查对find的调用是否返回nil

您也可以内联变量赋值。所以,你的代码将成为:

<% if (model_type = Modeltype.find_by(id: hardware.modeltype_id)) %>
  <td><%= model_type.mtype %></td>
<% else %>
  <td>hi</td>
<% end %>

编辑:只是为了解释我在哪里出错 - find如果找不到您要查找的ID,则会引发错误。因此,您可以使用where(...).first(如评论中所述),我通常使用find_by(id: 123)。我编辑了我的答案以反映这一点。