2013-05-14 138 views
8

我正在創建一個傳統數據庫表上的Rails應用程序。一切工作正常本地,但在服務器上我打這個錯誤,每當我做Article.find(1)Rails Article.find 1在傳統數據庫上引發ActiveRecord :: StatementInvalid

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字段,但是架構描述了

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

請注意,Article.find_by_id(1)返回記錄沒有任何問題。

任何想法如何解決這一問題?

回答

19

修訂 - 見下面

事實證明,添加以下的機型修復了這個:

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

據推測,因爲軌沒有創建表,它不知道主要關鍵是什麼領域。這似乎有點奇怪,一個受過教育的猜測帶有警告 - 甚至更友好的錯誤信息 - 將不勝感激。

更新: Rails 3.2+上述方法已被棄用。新方法如下:

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

感謝@lboix指出了這一點!

+0

作品perfectly..thanks :) – 2014-07-25 23:26:07

相關問題