ruby-on-rails-3 – Rails Article.find 1在遗留数据库上引发ActiveRecord :: StatementInvalid

我正在遗留数据库表上创建一个rails应用程序.一切都在本地工作正常,但在服务器上,每当我做Article.find(1)时我都会遇到此错误
Could not log "sql.active_record" event. NoMethodError: undefined method `name' for nil:NilClass
ActiveRecord::StatementInvalid: PG::Error: ERROR:  zero-length delimited identifier at or near """"
LINE 1: SELECT  "articles".* FROM "articles"  WHERE "articles"."" = $1 LIMIT 1

数据库一个id字段,但架构描述了id

create_table "articles",:id => false,:force => true do |t|
  t.decimal  "id",:precision => 10,:scale => 0,:null => false
  ...

请注意,Article.find_by_id(1)返回记录没有任何问题.

任何想法如何解决这一问题?

解决方法

更新 – 见下文

事实证明,将以下内容添加到模型中可以解决此问题:

class Article < ActiveRecord::Base
  set_primary_key :id 
  ...

据推测,因为rails没有创建表,所以它不知道主键是什么字段.虽然看起来有点奇怪,但有一个警告的猜测 – 甚至更友好的错误信息 – 将不胜感激.

更新:
Rails 3.2上面的方法已被弃用.新方法如下:

class Article < ActiveRecord::Base
  self.primary_key = :id 
  ...

感谢@lboix指出这一点!

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...