Hallo, ich würde mich freuen, zu hören, ob jemand von Euch folgendes
Problem
schon mal gehabt hat:
Ich habe eine (bestehende) SQLite3 Datenbank, die ich in Rails anzapfen
möchte.
In meinem Model habe ich folgende Methode, die mir Datensätze
zurückgibt:
def self.open_tasks
find(:all, :conditions => ‘ZDONE=0 AND ZSTARTDATE < ‘now’ AND
ZTAGS
NOTNULL AND ZDUEDATE NOTNULL’, :order => ‘ZDUEDATE ASC’)
end
Wenn ich mir das Ergbnis mit to_yaml ausgeben lasse, ist ZDUEDATE
gesetzt -
to_yaml gibt so was aus:
- !ruby/object:Task
attributes:
…
ZDUEDATE: “217162800”
…
Auf die Abfrage if nil == ZDUEDATE erhalte ich immer, dass ZDUEDATE nil
ist
- was ja laut to_yaml und nach meiner Query (ZDUEDATE NOTNULL) nicht
stimmt.
Bsp:
def due_date
nil != self.ZDUEDATE ? self.ZDUEDATE.strftime("%d.%m.%g") : “–not
set–”
end
gibt immer “–not set–”
Für mich gibt es zwei Erklärungsmöglichkeiten:
- Das Problem tritt auf, weil der Spaltenname nur aus Großbuchstaben
besteht
(“ZDUEDATE”). Hat da jemand einen Ansatz? - Rails kann den Typ TIMESTAMP von SQLite nicht verarbeiten. Das wäre
denkbar, weil von Rails generierte Datenbanken den Typ datetime
verwenden.
Hat jemand Erfahrung mit der Konvertierung von timestamp in datetime? - sonst: Ratlos
Insofern würde ich mich sehr über Vorschläge oder Erklärungen freuen!
Gibt es eigentlich eine Möglichkeit, die Spaltennamen umzubenennen, so
dass
ich nicht ZDUEDATE schreiben muss? So was wie set_table_name, nur für
Spalten?
Hier ist noch mal das Schema der Tabelle:
sqlite> .schema ZTASK
CREATE TABLE ZTASK ( Z_ENT INTEGER, Z_PK INTEGER PRIMARY KEY, Z_OPT
INTEGER,
ZEFFORT INTEGER, ZNEWINPROJECT INTEGER, ZRECURTYPE INTEGER, ZURL
VARCHAR,
ZDELEGATED INTEGER, ZPOSITIONINCONTEXT INTEGER, ZCLEANEDUP INTEGER,
ZNAME
VARCHAR, ZDONE INTEGER, ZNEWINCONTEXT INTEGER, ZCONTENT VARCHAR,
ZDUEDATE
TIMESTAMP, ZNEXTACTION INTEGER, ZCOMPLETIONDATE TIMESTAMP, ZMAYBE
INTEGER,
ZRECURMODE INTEGER, ZRECURNUMBER INTEGER, ZSTARTDATE TIMESTAMP,
ZPRIORITY
INTEGER, ZARCHIVED INTEGER, ZSYNCID VARCHAR, ZCONTACT VARCHAR,
ZPOSITIONINPROJECT INTEGER, ZWAITINGFOR INTEGER, ZTAGS VARCHAR,
ZPARENTPROJECT INTEGER, ZPARENTARCHIVECATEGORY INTEGER, ZPARENTCONTEXT
INTEGER );
sqlite> select sqlite_version();
3.1.3
Das ist übrigends eine Tabelle von iGTD, dem “Getting Things Done”-Tool
für
Mac, falls jemand direkt in die DB schauen möchte, das dürften ja einige
nutzen
Besten Dank,
Björn