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.
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
wahrscheinlich ja, es scheint ganzzahlig zu sein, denn das ist, was intern passiert: "173028f7-add5-4ddc-88ef-efb89ce841ba" .to_i –
Sie müssen UUID in 'string' ändern –