更新记录列的Rails只更新字符串的一部分

时间:2017-05-15 13:11:51

标签: ruby-on-rails activerecord

我有一个名为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。只是说清楚。

1 个答案:

答案 0 :(得分:0)

是的 - 答案在评论中列出,但您需要使用字符串进行存储。

按照此处的步骤更改表格: https://www.postgresql.org/docs/9.1/static/sql-altertable.html