Rails update_attribute在生产环境中不起作用

时间:2018-07-07 05:21:32

标签: ruby-on-rails postgresql heroku

登录生产:

irb(main):036:0> People.find(7).update_attribute(:all_read,[2,3])
  People Load (1.2ms)  SELECT  "people".* FROM "people" WHERE "people"."id" = $1 LIMIT 1  [["id", 7]]
  People Load (1.2ms)  SELECT  "people".* FROM "people" WHERE "people"."id" = $1 LIMIT 1  [["id", 7]]
   (0.7ms)  BEGIN
   (0.7ms)  BEGIN
   (0.7ms)  COMMIT
   (0.7ms)  COMMIT
  People Store (29.1ms)  {"id":7}
  People Store (29.1ms)  {"id":7}
=> true
irb(main):037:0> People.find(7).all_read
  People Load (1.0ms)  SELECT  "people".* FROM "people" WHERE "people"."id" = $1 LIMIT 1  [["id", 7]]
  People Load (1.0ms)  SELECT  "people".* FROM "people" WHERE "people"."id" = $1 LIMIT 1  [["id", 7]]
=> []

这在本地完美运行,但在heroku上不起作用。 我在本地使用sqlite3,在heroku上使用了postgresql。

其他相关代码:

class People < ActiveRecord::Base
  serialize :all_read, Array

schema.db
  create_table "people", force: :cascade do |t|
    ...
    t.string   "all_read",            default: "--- []\n"
  end

2 个答案:

答案 0 :(得分:0)

您应该检查数据库的版本。 还要在团队开发和生产中检查gem的版本。

在您的日志中没有看到更新查询。

答案 1 :(得分:0)

sqlite和postgres有很大的不同 开发时使用相同的数据库

例如,postgres中的varchar被指定为长度字符串,而sqlite中的varchar是不受限制的。

如果要查找确切的问题,请在update_attribute调用之后 .errors方法(与byebug或logger一起使用)以查看问题