我正在使用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并根据发生的格式
答案 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。