2017-05-15 3 views
0

Ich habe eine leere Spalte namens contractor_id vom Typ UUID. Jetzt versuche ich diese Spalte mit einer anderen UUID als Referenz zu aktualisieren. Beispiel: 173028f7-add5-4ddc-88ef-efb89ce841baRails Aktualisieren einer Datensatzspalte aktualisiert nur einen Teil der Zeichenfolge

Aber was passiert, ist, nach der Aktualisierung, die contractor_id Spalte hat nur 173028 und der Rest ist nicht da! Was passiert genau?

Hier ist der Code.

puts "current user id"   
puts current_user.id 
#=> 173028f7-add5-4ddc-88ef-efb89ce841ba 

    if Cleaner.invite!(:email => params[:email], :name => params[:name]) 

    Cleaner.find_by_email(params[:email]).update_attributes(contractor_id: current_user.id) 

Hier ist die Update-Abfrage, die in der Konsole angezeigt wird.

(0.4ms) BEGIN 
    SQL (1.1ms) UPDATE "cleaners" SET "contractor_id" = $1, "updated_at" = $2 WHERE "cleaners"."id" = $3 [["contractor_id", "173028f7-add5-4ddc-88ef-efb89ce841ba"], ["updated_at", 2017-05-15 18:22:15 +0530], ["id", "6389e05d-3158-4244-8eea-c4c343284962"]] 
    (24.1ms) COMMIT 

Also hier ist die schema.rb

create_table "cleaners", id: :uuid, default: -> { "uuid_generate_v4()" }, force: :cascade do |t| 
t.uuid  "contractor_id" 
t.index ["contractor_id"], name: "index_cleaners_on_contractor_id", using: :btree 


create_table "contractors", id: :uuid, default: -> { "uuid_generate_v4()" }, force: :cascade do |t| 

Die CONTRACTOR_ID Integer-Typ war. Also habe ich diese Migration ausgeführt, um sie in UUID-Typ zu ändern, damit UUIDs gespeichert werden können. Und es spiegelt sich auch im obigen Schema wider, wie Sie sehen können.

def change 
    remove_reference :cleaners, :contractor 
    add_reference :cleaners, :contractor, foreign_key: true, index: true, type: :uuid 
end 

P.S. Außerdem ist current_user.id die ID für den Auftragnehmer. Um es klar zu machen.

+2

tun Sie die Definition Ihrer 'Benutzer' Tabelle etwas dagegen zu teilen, vielleicht die 'id' Spalte integer ist, oder seine Länge ist nicht genug?. – fanta

+0

wahrscheinlich ja, es scheint ganzzahlig zu sein, denn das ist, was intern passiert: "173028f7-add5-4ddc-88ef-efb89ce841ba" .to_i –

+0

Sie müssen UUID in 'string' ändern –

Antwort

0

Ja - Die Antwort wurde in den Kommentaren aufgeführt, aber Sie müssen eine Zeichenfolge für die Speicherung verwenden.

die Schritte mitverfolgen für die Tabelle zu ändern: https://www.postgresql.org/docs/9.1/static/sql-altertable.html

+0

Gut. Rails ließ mich den Spaltentyp nicht in String ändern. Warf und Fehler, der besagt, dass der Fremdschlüssel-Referenzspalten-Typ nicht übereinstimmt. Also habe ich es einfach so wie es ist verlassen und meinen Laptop neu gestartet. Es hat danach funktioniert. Ich musste nur meinen Laptop neu starten. Seltsam. – Chet

+0

Sehr seltsam. Aber gut, ich denke, haha! – code4fun

Verwandte Themen