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