2013-05-14 10 views
8

Sto creando un'app per rails su una tabella di database legacy. Tutto funziona bene a livello locale, ma sul server mi ha colpito questo errore ogni volta che faccio Article.find (1)Rails L'articolo I. 1 aumenta ActiveRecord :: StatementInvalid su database legacy

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 

Il database legacy ha un campo id, tuttavia lo schema descrive l'ID con

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

Si noti che Article.find_by_id (1) restituisce il record senza alcun problema.

Qualche idea su come risolvere questo problema?

risposta

19

AGGIORNATO - Vedi sotto

Si scopre, aggiungendo quanto segue alla modella correzioni questo:

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

Presumibilmente, perché le rotaie non hanno creato la tabella, non conosce quale campo è la chiave primaria. Sembra un po 'strano però, un'ipotesi colta con un avvertimento - o anche un messaggio di errore più amichevole - sarebbe apprezzata.

UPDATE: Rails 3.2+ il metodo sopra è obsoleto. Il nuovo metodo è il seguente:

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

Grazie a @lboix per la precisazione!

+0

Opere perfectly..thanks :) –

Problemi correlati