【发布时间】:2011-12-28 00:17:12
【问题描述】:
我是 ruby on rails 的新手,我继承了一个代码库。现在我无法在我的应用程序中创建新的用户帐户,当我尝试时收到以下错误:
Users::RegistrationsController#create 中的 NoMethodError
nil:NilClass 的未定义方法“名称” Rails.root: /home/nathan/dev/legwork-core
应用程序跟踪 |框架跟踪 |全跟踪
app/models/contact.rb:74:in block (2 levels) in <class:Contact>'
app/models/user.rb:31:inupdate_contact'
调用代码在这里:
searchable do
string :category do
self.category.name
end
end
Category 应该是 ContactCategory 的一个实例,我认为我需要将 self.category 设置为默认值(如果它为零)。我试过这个来解决它:
after_initialize :set_defaults
def set_defaults
self.category = ContactCategory.first if self.category.nil?
end
我也试过了:
def after_initialize
self.category = ContactCategory.first if self.category.nil?
end
我已经试过了:
before_create :set_defaults
def set_defaults
self.category = ContactCategory.first if self.category.nil?
end
有人建议将此逻辑放在 before_save 中,但已经有一个 before_save 包含此逻辑,这就是我看到作者最初打算成为默认值的地方。
更新:
现在我明白了问题所在,这个问题很愚蠢。我假设赋值语句从未运行,因为我假设 ContactCategory.first 也不为零。可悲的是,这里的一切都按预期工作。这个故事的寓意是:
我用来设置默认值的所有钩子都正常工作。我建议使用它们使用 ActiveRecord 设置默认值。
【问题讨论】:
-
你能告诉我们数据库结构吗?描述表?目前您正在使用“名称”,但该字段似乎不存在。
-
这就是用户中的 NoMethodError::RegistrationsController#create undefined method `name
-
真正的问题是类别为零:
undefined method 'name' for nil:NilClass。 -
我以为是类别没有被分配,所以 nil 没有名为“name”的方法。
标签: ruby-on-rails ruby activerecord