【问题标题】:Rails - Can't access attribute with dot notationRails - 无法使用点符号访问属性
【发布时间】:2012-11-15 11:07:08
【问题描述】:

我有一个 Rails 3.2.8 应用程序,其模型名为 Task。在我的任务模型中,我有一个名为“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 吗?谢谢。

【问题讨论】:

  • 你能打开rails控制台,加载一个Task对象并检查它是什么类吗?类似t = Task.firstt.class
  • 去掉attr_accessor :complete_date还能用吗?你不应该写它,因为 AR 使用缺少的方法从数据库中检索属性。

标签: ruby-on-rails ruby activerecord


【解决方案1】:

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

【讨论】:

  • 那行得通。谢谢。我是 Rails n00b,我以为我疯了!
猜你喜欢
  • 1970-01-01
  • 2017-02-05
相关资源
最近更新 更多