2017-05-15 61 views
0

我有一個名爲contractor_id的UUID類型的空列。現在即時嘗試更新此列與另一個UUID以供參考。例如:173028f7-add5-4ddc-88ef-efb89ce841baRails更新記錄列僅更新字符串的一部分

但是,發生了什麼事情後,更新後,contractor_id列只有173028,其餘的不在那裏!到底發生了什麼?

這是代碼。

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) 

下面是在控制檯中顯示的更新查詢。

(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 

因此,這裏的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| 

的contractor_id是整數類型。所以我運行這個遷移將其更改爲uuid類型,以便它可以存儲uuid。正如你所看到的,它也反映在上面的模式中。

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

P.S. current_user.id也是承包商的ID。只是爲了說清楚。

+2

你不介意分享你的'users'表的定義,或許是'id'列是整數,或者其長度是不夠的? – fanta

+0

可能是的,它似乎是整數,因爲這是內部發生的事情:「173028f7-add5-4ddc-88ef-efb89ce841ba」.to_i –

+0

您必須將UUID更改爲'string' –

回答

0

是的 - 答案已在評論中列出,但您需要使用字符串進行存儲。

按照以下步驟這裏改變你的表: https://www.postgresql.org/docs/9.1/static/sql-altertable.html

+0

好吧。 Rails沒有讓我將列類型更改爲字符串。拋出和錯誤說外鍵引用列類型不匹配。所以我只是把它留下來,因爲它是uuid並重新啓動我的筆記本電腦。它在那之後工作。我只好重新啓動筆記本電腦。奇怪的。 – Chet

+0

非常奇怪。但好,我猜哈哈! – code4fun