8

我正在旧数据库表上创建一个 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) 返回记录没有任何问题。

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

4

2 回答 2

19

更新- 见下文

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

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

大概是因为rails没有创建表,所以它不知道主键是什么字段。不过,这似乎有点奇怪,一个带有警告的有根据的猜测 - 甚至是更友好的错误消息 - 将不胜感激。

更新: Rails 3.2+ 不推荐使用上述方法。新方法如下:

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

感谢@lboix 指出这一点!

于 2013-05-14T11:42:27.483 回答
4

似乎这个选项已经更新了伙计们:Rails 中的 set_primary_key 错误

希望它会有所帮助:)

小心

于 2014-03-24T02:29:31.977 回答