Ich hoffe ich hab mit dieser Frage das richtige Unterforum getroffen...
Ich schreibe eine rails-anwendung und ich habe folgendes Problem an dem ich mir im Moment die Zähne ausbeisse:
Ich habe einen View bestehend aus 2 Tabellen angelegt. Damit ich auch konsistent schreiben kann, habe ich die folgende INSERT RULE angelegt.
- Code: Alles auswählen
CREATE RULE extended_view_insert AS ON INSERT TO extended_view
DO INSTEAD
INSERT INTO base VALUES (
DEFAULT,
NEW.contact_first_name,
NEW.contact_last_name,
NEW.description,
)
RETURNING CAST(currval('base_id_seq'::text) AS integer);
base:
id - serial
contact_first_name - string
contact_last_name - string
description - string
extension1:
base_id - integer
version - string
Ich würde gerne noch in die zweite Tabelle schreiben in der Rule, aber schon hier schreit der Ruby-Interpreter beim RAKE-Job rum.
Wenn ich kein Returning rausschreibe bei der INSERT-Operation meckert das ActiveRecord beim Einfügen mit folgender Meldung:
Mcannot perform INSERT RETURNING on relation "extended_view" HYou need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause.
Also versuche ich jetzt in meiner Rule die automatisch zugewiesene id aus base zurückzugeben, was jedoch leider nicht klappt.
Wenn ich in der letzten Zeile der Rule einfach schreibe "RETURNING id", bekomme ich die Meldung "RETURNING list has too few entries", genau wie bei der letzten Codezeile oben. Hat irgendjemand eine Ahnung was diese Meldung zu bedeuten hat?
Ich interpretiere dass momentan (in meiner totalen Unwissenheit) so, dass der interpreter versucht, die Rückgabe in Form eines Datensatzes von extended_view zurückzugeben, aber wie zum Henker gebe ich denn nur die id zurück, denn mehr brauche ich ja nicht.
Ich hoffe ihr könnt mir helfen, auf jeden Fall schonmal vielen Dank!
Grüße,
Buzztea
