检查null并相应地显示

时间:2015-04-18 13:01:09

标签: ruby ruby-on-rails-4 null

我正在使用ruby on rails并创建索引方法以显示所有学生。我的学生表包括注册日期,其中日期时间字段且可以为空

我的表格部分在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(对象必须是Date,DateTime或Time对象。给定nil。):

所以请指导我验证nil并根据发生的格式

2 个答案:

答案 0 :(得分:0)

尝试这样做:

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

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

答案 1 :(得分:0)

我会做这样的事情:

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

另一个 - 更好的选择 - 可能是使用一个总是返回有用值的呈现器(格式化的字符串或一些字符串)

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