1

我有一个带有名为 Task 的模型的 Rails 3.2.8 应用程序。在我的任务模型中,我有一个名为“complete_date”的日期时间属性。当我尝试在视图中查看我的 complete_date 时...

<%= @task.complete_date.strftime('%b %e, %Y') %>

我收到一条错误消息,提示“nil:NilClass 的未定义方法 `strftime'”。但是,complete_date 字段不为空。以下查询..

mysql> select count(*) from tasks where complete_date is null;

返回 0 行。我可以使用以下代码在同一视图中检索完整日期...

<% @task.attributes.each_pair do |name, value| %>
    <% if name == "complete_date" %>
      <%= value.strftime('%b %e, %Y') %>
    <% end %>
<% end %>

这完美地工作,所以似乎问题仅在于使用点符号(@task.complete_date)访问属性。我已在我的任务模型中将“完成日期”列为 attr_accessible 和 attr_accessor。知道为什么在使用 @task.complete_date 引用 complete_date 字段时我总是得到 nil 吗?谢谢。

4

1 回答 1

2

你应该删除attr_accessor :complete_date. 因为attr_accessor创建了两个方法(#complete_date& #complete_date=)并使用了实例变量@complete_date,即 nil,因为它没有填充记录属性的值。这两个方法覆盖了 ActiveRecord 属性访问器方法。

于 2012-11-15T11:25:10.633 回答