检查 null 并相应地显示

check null and display accordingly

我在 ruby rails 工作并创建索引方法以显示所有 students.My 学生 table 包括 EnrollmentDate其中 datetime 字段并且是 nullable

我的 table 在 html 中显示学生列表的正文部分如下;

<tbody>
<% @students.each do |student| %>
  <tr>
    <td><%= student.LastName %></td>
    <td><%= student.FirstMidName %></td>
    <td><%=l student.EnrollmentDate, format: :long %></td>
    <td><%=l student.created_at, format: :long %></td>
    <td>
      <%= link_to t('.edit', :default => t("helpers.links.edit")),
                  edit_student_path(student), :class => 'btn btn-default btn-xs' %>
      <%= link_to t('.details', :default => t("helpers.links.details")),
                  student_path(student), :class => 'btn btn-default btn-xs' %>
      <%= link_to t('.destroy', :default => t("helpers.links.destroy")),
                  student_path(student),
                  :method => :delete,
                  :data => { :confirm => t('.confirm', :default => t("helpers.links.confirm", :default => 'Are you sure?')) },
                  :class => 'btn btn-xs btn-danger' %>
    </td>
  </tr>
<% end %>

这里的问题是在 EnrollmentDate 中为 null。我使用本地化来格式化 EnrollmentDate,当数据为空时会产生错误。错误是

ActionView::Template::Error(对象必须是日期、日期时间或时间对象。未给出。):

所以请指导我验证 nil 并基于该格式发生

尝试这样做:

 <td><%=l student.EnrollmentDate, format: :long if student.EnrollmentDate.present? %></td>

你也可以这样做:

<td><%=l student.EnrollmentDate, format: :long unless student.EnrollmentDate.nil? %></td>

如果这不起作用,那么您可以这样做:

<% if student.EnrollmentDate.present? %>
   <%=l student.EnrollmentDate, format: :long %>
<% end %>

因此,如果注册日期为零,则不会显示任何内容。

我会这样做:

<td>
  <% if student.EnrollmentDate %>
    <%=l student.EnrollmentDate, format: :long %>
  <% else %>
    not enrolled yet
  <% end %>
</td>

另一个 - 甚至更好的选择 - 可能是使用始终returns有用值(格式化字符串或某些字符串)

的演示者

顺便说一句:Ruby 中的命名约定是下划线多个单词不在变量名中使用驼峰式。