【问题标题】:Rails 2.3.8 attributes read errorRails 2.3.8 属性读取错误
【发布时间】:2011-10-23 14:16:32
【问题描述】:
  • Rails 2.3.8
  • Windows Server 2003
  • 服务器 SQL Server 2005

嗯,这个错误完全没有意义。我已经检查了好几次了。这是控制台的示例。

>> s = SaleItemArchive.find(118296)
=> #<SaleItemArchive id: 118296, sale_id: 60308, item_id: 19825, quantity: 40, p    rice: 0.75, created_at: "1998-08-10 00:00:00", quantity_shipped: 0>
>> s.created_at
=> nil
>> s.attributes["created_at"]
=> Mon Aug 10 00:00:00 UTC 1998
>>
>> s.class.match_attribute_method?("created_at")
=> nil
>> s.class.generated_methods.include?("created_at")
=> false
>>

这是一个普通的例子。

>> s = SaleItemArchive.find(118297)
=> #<SaleItemArchive id: 118297, sale_id: 60309, item_id: 2931, quantity: 100, price: 0.07, created_at: "1998-08-10 00:00:00", quantity_shipped: 0>
>> s.created_at
=> Mon, 10 Aug 1998 00:00:00 PDT -07:00
>> s.attributes["created_at"]
=> Mon Aug 10 00:00:00 UTC 1998

我已经在数据库中的许多其他行上对其进行了测试,这是整个数据库中唯一给我带来问题的行。这完全没有意义。由于没有给出错误,我花了一段时间才弄清楚出了什么问题。有什么想法吗?

我尝试检查,但由于某种原因未创建属性方法。我试过用新行复制这个问题,编辑其他行等。什么都没有。请帮忙。

【问题讨论】:

  • 已更新。请检查一下。
  • 很奇怪……显示你的型号代码?
  • 您是否直接在 MSSQL Management Studio 中查看了 118296 行并将其与其他行进行了比较?只是为了确保该行中没有任何奇怪的数据..

标签: ruby-on-rails ruby sql-server-2005


【解决方案1】:

最有可能的情况是数据库中的行只是缺少该行。该对象仍然响应created_at 方法(因为它不会抛出错误),因此唯一的解释是该行的列为空。

【讨论】:

  • 仔细阅读包含的控制台输出:=&gt; #&lt;SaleItemArchive id: 118296, sale_id: 60308, item_id: 19825, quantity: 40, price: 0.75, created_at: "1998-08-10 00:00:00", quantity_shipped: 0&gt;,里面有一个created_at。还要注意s.attributes["created_at"] 结果。 `
  • 您是如何生成created_at 日期的?您的正常记录和不良记录的 attributes['created_at'] 相同,此外,正常记录的 s.created_at 返回 id PDT 而不是 UTC(所以它们似乎不是同一时间?)。
  • 生成的 Rails 访问器方法应用了时区调整,因此 s.created_ats.attributes["created_at"] 之间存在差异。我不知道 Mike 的 created_at 值是从哪里来的。
  • 让我感到奇怪的不是时区差异,而是两个时区的午夜时间......
  • 但至少这两种情况是一样的。
猜你喜欢
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
相关资源
最近更新 更多