检查 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 中的命名约定是下划线多个单词不在变量名中使用驼峰式。
我在 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 中的命名约定是下划线多个单词不在变量名中使用驼峰式。