我有一个名为contractor_id的空列,其类型为UUID。现在我尝试用另一个UUID更新此列以供参考。示例:173028f7-add5-4ddc-88ef-efb89ce841ba
但是发生了什么,在更新之后,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。只是说清楚。
答案 0 :(得分:0)
是的 - 答案在评论中列出,但您需要使用字符串进行存储。
按照此处的步骤更改表格: https://www.postgresql.org/docs/9.1/static/sql-altertable.html