Rails 4中sql查询的回滚
我有一张桌子:Rails 4中sql查询的回滚,sql,ruby-on-rails,Sql,Ruby On Rails,我有一张桌子: create_table "requests", force: :cascade do |t| t.string "name" t.string "address" t.integer "client_id" t.string "phone" t.string "mobile" t.text "social_media" t.string "email" t.integer "type
create_table "requests", force: :cascade do |t|
t.string "name"
t.string "address"
t.integer "client_id"
t.string "phone"
t.string "mobile"
t.text "social_media"
t.string "email"
t.integer "type"
t.text "subtype"
t.text "description"
t.string "priority"
t.integer "responsible"
t.integer "price"
t.boolean "payed", default: false
t.datetime "date"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
注意,我已经删除了所有约束,如NOTNULL等。
我有一个方法:
def mark_payed
@request.update(payed: true)
redirect_to requests_path
end
所以我想将payed boolean属性更新为true。
当我用如下定义的名称更新请求对象时:(注意:name属性已设置)
它工作正常,我的付费属性已更新
但是当我更新这个时:(注意:name属性是空的(“”)
我得到一个回滚
以下是两种情况的日志:
案例1:
案例2:
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
Request Load (0.4ms) SELECT "requests".* FROM "requests" WHERE "requests"."id" = $1 LIMIT 1 [["id", 2532]]
Request Load (0.4ms) SELECT "requests".* FROM "requests" WHERE "requests"."id" = $1 LIMIT 1 [["id", 2532]]
(0.2ms) BEGIN
(0.2ms) BEGIN
(0.4ms) ROLLBACK
(0.4ms) ROLLBACK
所以我在更新查询中得到了回滚。另外,如果有意义的话,我有一个before\u update:update\u属性,它通过客户机\u id查找\u。
注意,在第一种情况下,client_id为null,这是有效的,
在第二种情况下设置,但不设置。所以我的结论是,这不是由于之前的更新
另外,日志翻倍也有点奇怪,但这超出了我目前的问题范围
编辑:我的更新前操作(顺便说一句,我在更新前注释掉了,问题是一样的)
def更新_属性
@client=client.find_by(client_id:self.client_id)如果self.client_id.present?
如果@client.present?
装满的弹药筒。每个都有|
@r=已填充的盒式磁带。查找方式(请求id:d.id)
@盒带=盒带。查找方式(盒带名称:d.盒带名称)
如果@cartridge.nil?
@cartridge=cartridge.create!(盒带名称:d.盒带名称)
结束
d、 client_id=@client.id
d、 cartridge\u id=@cartridge.id
结束
结束
#更新修复盒属性
结束
你能在更新之前发布你的的代码吗?@vmarquet,我编辑了我的问题。我不知道你在做什么,但在分号分隔的第二行字段中,有些字段包含“
”,它不是空的,而是字符串”
,所以您试图在整数数据库字段中保存一个字符串。@vmarquet,没有选中它。'仅存储在不同字符的单元格中。整数在整数单元格中。@vmarquet,关于案例1日志,在update语句中,请注意社交媒体等字段也在更新,但我只调用payed属性上的update。这可能是问题所在吗?你能在更新之前发布你的的代码吗?@vmarquet,我编辑了我的问题。我不太明白你在做什么,但在分号分隔的第二行字段中,有些字段包含“
”,它不是空的,而是字符串”
,所以您试图在整数数据库字段中保存一个字符串。@vmarquet,没有选中它。'仅存储在不同字符的单元格中。整数在整数单元格中。@vmarquet,关于案例1日志,在update语句中,请注意社交媒体等字段也在更新,但我只调用payed属性上的update。这可能是问题所在吗?你能在更新之前发布你的的代码吗?@vmarquet,我编辑了我的问题。我不太明白你在做什么,但在分号分隔的第二行字段中,有些字段包含“
”,它不是空的,而是字符串”
,所以您试图在整数数据库字段中保存一个字符串。@vmarquet,没有选中它。'仅存储在不同字符的单元格中。整数在整数单元格中。@vmarquet,关于案例1日志,在update语句中,请注意社交媒体等字段也在更新,但我只调用payed属性上的update。这会是个有问题的地方吗?
2532;"''";"''";89;"''";"''";"";"";3;"";"-";"2";2;1200;FALSE;"";"2015-06-09 00:00:00";"2015-06-16 11:18:54.296975"
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
Request Load (0.4ms) SELECT "requests".* FROM "requests" WHERE "requests"."id" = $1 LIMIT 1 [["id", 2533]]
Request Load (0.4ms) SELECT "requests".* FROM "requests" WHERE "requests"."id" = $1 LIMIT 1 [["id", 2533]]
(0.4ms) BEGIN
(0.4ms) BEGIN
SQL (1.0ms) UPDATE "requests" SET "social_media" = $1, "subtype" = $2, "payed" = $3, "updated_at" = $4 WHERE "requests"."id" = $5 [["social_media", nil], ["subtype", nil], ["payed", "t"], ["updated_at", "2015-06-17 08:50:45.921870"], ["id", 2533]]
SQL (1.0ms) UPDATE "requests" SET "social_media" = $1, "subtype" = $2, "payed" = $3, "updated_at" = $4 WHERE "requests"."id" = $5 [["social_media", nil], ["subtype", nil], ["payed", "t"], ["updated_at", "2015-06-17 08:50:45.921870"], ["id", 2533]]
(8.7ms) COMMIT
(8.7ms) COMMIT
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
Request Load (0.4ms) SELECT "requests".* FROM "requests" WHERE "requests"."id" = $1 LIMIT 1 [["id", 2532]]
Request Load (0.4ms) SELECT "requests".* FROM "requests" WHERE "requests"."id" = $1 LIMIT 1 [["id", 2532]]
(0.2ms) BEGIN
(0.2ms) BEGIN
(0.4ms) ROLLBACK
(0.4ms) ROLLBACK