【发布时间】:2009-06-12 00:30:20
【问题描述】:
我的 Rails 项目中有一个非常烦人且难以解决的错误。
在创建了一堆模型及其关系之后,我想列出它们。
但我不断收到错误消息“无法复制 NilClass”。也就是说,直到我重新启动服务器。然后我就可以列出它们了。
调试此问题后发现,当我尝试返回其中一个属性的值时,在其中一个模型的方法中引发了错误。我在方法中有一个断点,这就是我在调试器中得到的:
(rdb:5) 自我 # (rdb:5) 富 TypeError 异常:无法复制 NilClass (rdb:5) 属性[:foo] 零 (rdb:5) 属性["foo"] 2237我是否重新加载页面无关紧要。在我重新启动服务器之前,我得到了同样的错误。
我的模型基本上是这样的(错误出现在方法baz):
class FooBar < ActiveRecord::Base
belongs_to :foo, :class_name => "BarFoo", :foreign_key => "foo", :dependent => :destroy
belongs_to :bar, :class_name => "BarFoo", :foreign_key => "bar", :dependent => :destroy
validates_presence_of :foo, :on => :create
def baz
[foo, bar].compact
end
end
我的架构如下所示:
create_table "foo_bar", :force => true do |t|
t.integer "foo"
t.integer "bar"
t.datetime "created_at"
t.datetime "updated_at"
end
更新:
在我得到更多答案之前指出 :foo 和 "foo" 不一样:我知道它们不相等,但这不是这里的问题。
而且,我刚刚确认 read_attribute("foo") 确实返回与 read_attribute(:foo) 相同的结果。 self[:foo] 和 self["foo"] 也是如此。这些都没有返回零。然而,它们都返回 foo 的 id,而不是 foo 本身。
【问题讨论】:
-
您需要提供更多信息:模型的数据库架构、foo 方法定义和设置 foo 的代码。
标签: ruby-on-rails null