我有一個名爲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。只是爲了說清楚。
你不介意分享你的'users'表的定義,或許是'id'列是整數,或者其長度是不夠的? – fanta
可能是的,它似乎是整數,因爲這是內部發生的事情:「173028f7-add5-4ddc-88ef-efb89ce841ba」.to_i –
您必須將UUID更改爲'string' –