当前位置: 首页 > 面试题库 >

未定义的方法'eq'的nil:NilClass与Ubuntu 3上的Rails 3和Ruby企业

海叶秋
2023-03-14
问题内容

我不确定是什么原因导致此错误,但是由于我在乘客中以及现在在控制台中都遇到了此问题,所以我想也许是MySQL驱动程序出了问题?一切都按预期在osx /
10.6上运行。它只是不会在Ubuntu 8.04 Hardy上使用。

我将问题确定为“销毁”方法,或者直接调用activerecord实例的方法。为什么会这样呢?有任何想法吗?

系统:

  • Ubuntu 8.04 Hardy。
  • ruby 1.8.7(2010-04-19补丁程序级别253)[i686-linux],MBARI 0x8770,Ruby Enterprise Edition 2010.02
  • 导轨3.0.0-beta4
  • 适用于使用readline 5.2的debian-linux-gnu(i486)的mysql Ver 14.12 Distrib 5.0.51a

这是错误输出

root@gehege:/var/www/foobar.com/api.foobar.com/v1# rake cleanup:status_cleanup RAILS_ENV=production --trace
(in /var/www/foobar.com/api.foobar.com/v1)
** Invoke cleanup:status_cleanup (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute cleanup:status_cleanup
rake aborted!
undefined method `eq' for nil:NilClass
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/activerecord-3.0.0.beta4/lib/active_record/persistence.rb:76:in `destroy'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/activerecord-3.0.0.beta4/lib/active_record/locking/optimistic.rb:110:in `destroy'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/activerecord-3.0.0.beta4/lib/active_record/callbacks.rb:278:in `destroy'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/activesupport-3.0.0.beta4/lib/active_support/callbacks.rb:412:in `_run_destroy_callbacks'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/activerecord-3.0.0.beta4/lib/active_record/callbacks.rb:278:in `destroy'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/activerecord-3.0.0.beta4/lib/active_record/transactions.rb:230:in `destroy'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/activerecord-3.0.0.beta4/lib/active_record/transactions.rb:287:in `with_transaction_returning_status'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/activerecord-3.0.0.beta4/lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/activerecord-3.0.0.beta4/lib/active_record/transactions.rb:202:in `transaction'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/activerecord-3.0.0.beta4/lib/active_record/transactions.rb:285:in `with_transaction_returning_status'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/activerecord-3.0.0.beta4/lib/active_record/transactions.rb:230:in `destroy'
/var/www/foobar.com/api.foobar.com/v1/lib/tasks/cleanup.rake:8
/var/www/foobar.com/api.foobar.com/v1/lib/tasks/cleanup.rake:6:in `each'
/var/www/foobar.com/api.foobar.com/v1/lib/tasks/cleanup.rake:6
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
/opt/ruby-enterprise-1.8.7-2010.02/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31
/opt/ree/bin/rake:19:in `load'
/opt/ree/bin/rake:19

编辑:

即使在运行apt-get更新/升级到最新的强壮软件包并重新编译ree和mysql gem之后,我仍然遇到相同的错误。


问题答案:

回答我自己的问题:经过研究,我发现rails(activerecord)在映射到模型的表上需要id字段。如果使用链接表,则不需要它们-
但是对于要作为模型进行处理的表,则是必需的。就我而言,解决方案是添加

set_primary_key :cal_id

其中,cal_id是我的唯一密钥。



 类似资料:
  • 我知道有很多类似的问题,但这些解决方案都不管用。我有一个关系数据库。具体来说,我有两个相互关联的表格:程序和讲师。 表之间的关系如下: 一个程序“has_many:讲师”和一个讲师“belongs_to:程序” 以下是表格模型的代码: 我还有一个非常简单的观点: 控制器为: 问题是RoR没有识别表之间的关系,导致行"@an.instructors.empty?失败,并出现以下错误:nil的未定义方

  • 超过3个小时,我试图解决相当容易的错误(第一眼): 但还是没有成功。 我有DB表products,其中包含列category\u id和manufacturer\u id。 协会: 试图获取一些数据: 我获取了所有行,其中在列

  • 我正在学习Ruby,我有一个无法理解的bug。我有一个方法,它接受一个字符串(行)数组,并删除所有行,直到包含模式的某一行。该方法如下所示: 这工作正常,生成的字符串(行)正确显示在我正在生成的网页上。 此外,我想删除该模式后面的所有非空行。我修改了方法如下: 令人惊讶的是(至少对我来说)这不起作用。在生成的网页上,我看到的不是内容,而是错误消息:Liquid error:nil类的未定义方法“[

  • 我想用ruby制作一个康威的生活游戏版本。我创建了一个网格类,其中@play\u area作为实例变量。然而,当我运行代码时,@play\u area在经过两次求值后显示为nil(当在行中求值时,如果@play\u area[x\u mod][y\u mod].alive)。为什么会这样? 编辑 以下是初始化函数: 以下是发生错误的函数: 对@play_area中每个单元格的检查显示每个单元格都正

  • 我正在玩ruby混合的一些基础知识,由于某种原因无法从我的模块访问行为。 在Ruby Fiddle上运行它: 这会不断返回 我从tutorialspoint对mixin应该如何工作的理解让我觉得我应该能够有效地调用e.meow ,并返回与调用猫相同的结果。喵 。 这是RubyFiddle中的代码。 难以置信的基本,但你知道我在哪里跌倒吗?

  • Good day我不确定发生了什么我怀疑eclipse,但在UserDetailsServiceImpl中它是定义的,因为我实现了spring的UserDetails服务,下面是我的代码 这是让人头痛的一行“UserDetails UserDetails=userDetailsService.loadUserByUsername(username)”提前感谢您