Domanda

Ho una tabella con una riga e due colonne-

int 'version', datetime 'updated'

Esiste un modo Rails ActiveRecord per ottenere e impostare i dati in queste colonne? Non esiste una colonna ID.

Sto usando questa tabella per tenere traccia delle versioni delle query di altre tabelle. Dopo ogni query di un'altra tabella, la colonna della versione viene incrementata e la colonna aggiornata viene impostata con il datetime corrente.

È stato utile?

Soluzione

Nulla ti impedisce di usarlo in ActiveRecord senza ID:

La migrazione contiene:

create_table :posts, :id => false do |t|
  t.integer :version
  t.datetime :updated
end

Query:

>> Post.create(:version => 1, :updated => Time.now)
=> #<Post version: 1, updated: "2009-05-05 19:24:31">
>> Post.all
=> [#<Post version: 1, updated: "2009-05-05 19:24:31">]
>> Post.all(:conditions => { :version => 1 })
=> [#<Post version: 1, updated: "2009-05-05 19:24:31">]

Il registro riporta queste richieste SQL:

CREATE TABLE "posts" ("version" integer, "updated" datetime) ;
INSERT INTO "posts" ("version", "updated") VALUES(1, '2009-05-05 19:24:31');
SELECT * FROM "posts" 
SELECT * FROM "posts" WHERE ("posts"."version" = 1) 

Spero che aiuti

Altri suggerimenti

Nella tua classe di modello, usa self.primary_key = " primary_key_column " per specificare la colonna da usare come colonna chiave primaria. Immagino che nel tuo caso potresti usare la colonna della versione.

L'unica cosa con cui funziona Rails, quando non è presente alcuna colonna id , è una tabella di join has_and_belongs_to_many .

Altrimenti devi passare al puro SQL, con qualcosa del tipo:

SomeModel.connection.execute "select * from mytable"

O se versione deve essere la chiave primaria, usa la risposta di John.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top