ActiveRecord-Modell ohne primary key
Habe ich ein ActiveRecord-model GPA
, die nicht über einen Primärschlüssel:
class GPA < ActiveRecord::Base
end
Wenn ich versuche zu nennen GPA.first.to_json
bekomme ich TypeError: false is not a symbol
. Ich vermute, dass dies aufgrund ActiveRecord versuchen, nachschlagen der Primärschlüssel. Was ist die richtige Art zu implementieren ein Modell ohne Primärschlüssel?
- was bedeutet GPA.zuerst gibt Sie?
GPA.first
gibt mir#<GPA strm: 1120, gpa: "1.3", acad_career: nil, student_id: 13798578>
aber anrufento_json
auf es wirft den Fehler habe ich oben angegeben- Für das, was ich getestet habe, scheint dies ein Fehler zu sein. Wenn Sie
GPA.first.attributes
bekommen Sie so etwas wie{"name"=>"1", "count1"=>1, nil=>nil}
und diesenil=>nil
ist, was das problem verursacht. In Ihrem Fall haben Sie vielleichtfalse=>false
statt. - versuchen Sie, set_primary_key "student_id" in deiner GPA-Modell
student_id
ist keine eindeutige Spalte. Diese Einstellung könnte unvorhergesehene Nebenwirkungen.- wie über das setzen
attr_accessor :id
in Ihrem Modell? Würde es die Standardeinstellungen außer Kraft setzen und geben Sie null für die id immer. Aber id ist nicht in der db, so spielt keine Rolle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Normalerweise ist es entweder einige Spalte oder Kombination von Spalten, die zusammen bilden Sie einen primären Schlüssel. Wenn Sie sagen, dass Ihre Tabelle nicht über einen Primärschlüssel meinst du es muss nicht eine
id
Feld?Gibt es eine weitere Spalte, die eine unique/natürlicher Schlüssel? Wenn ja, können Sie:
Können Sie auch zusammengesetzte Schlüssel verwenden mit der zusammengesetzte Schlüssel Juwel, wie folgt:
Müssen Sie etwas wie dies in Ihrer Migrationen oder schema
Ist es sehr ratsam, die Schienen Standard-Konventionen für die Modellierung Ihrer Daten. Nur Standardwerte überschreiben, wenn Sie den Umgang mit legacy-Tabellen.
Option 1
Müssen Sie das überschreiben der primäre Schlüssel für Ihr Modell, indem Sie Folgendes tun:
Nun, wenn Sie rufen
.to_json
json wird, enthält die Schlüsselid
stattstrm
.Option 2
Alternative ist die Verwendung eines json-Konstruktoren wie jbuilder, so dass es nicht versuchen, zu konvertieren nicht-existent 'id' json mit Standard-Schienen json-Konstruktor.
Fügen Sie eine migration fügt hinzu, dass id als Spalte. Es ist nicht wehtun, vorhandenen code. So stellen Sie sicher es hat ein autoincrement auf es so es nicht zu meckern über doppelte Eintrag 0.
Haben Sie versucht,ActiveModel::Serialisierungsprogramme::JSON?