Rails - 无法使用点表示法访问属性

时间:2012-11-15 11:07:09

标签: ruby-on-rails ruby activerecord

我有一个名为Task的模型的Rails 3.2.8应用程序。在我的Task模型中,我有一个名为'complete_date'的日期时间属性。当我尝试使用..

在视图中查看我的complete_date时
<%= @task.complete_date.strftime('%b %e, %Y') %>

我收到一条错误,说“未定义的方法`strftime'代表nil:NilClass”。但是,complete_date字段不为null。以下查询..

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

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

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

这很有效,所以看起来问题只在于使用点表示法访问属性(@ task.complete_date)。我在我的Task模型中列出了'complete_date'作为attr_accessible和attr_accessor。知道为什么我在使用@ task.complete_date引用complete_date字段时总是变为nil?感谢。

1 个答案:

答案 0 :(得分:1)

您应该删除attr_accessor :complete_date。由于attr_accessor创建了两种方法(#complete_date&amp; #complete_date=)并使用了实例变量@complete_date,因此它没有填充记录属性的值。这两种方法重写了ActiveRecord属性访问器方法。