我正在尝试更新由Heroku托管的应用程序上的记录,但更改仍在恢复。这个过程适用于我的本地版本,所以我不知道发生了什么。
使用Postgres的Rails 5
heroku run rails c
new_value = "Some valid value"
post = Post.find(123)
post.update_attribute(:name, new_value)
D, [2017-03-22T17:01:30.955525 #4] DEBUG -- : (0.9ms) BEGIN
D, [2017-03-22T17:01:30.961653 #4] DEBUG -- : (2.2ms) COMMIT
=> true
post.name
=> nil
#Try another way
post.name = new_value
post.valid?
=> true
post.save
D, [2017-03-22T16:53:28.405310 #4] DEBUG -- : (1.6ms) BEGIN
D, [2017-03-22T16:53:28.427131 #4] DEBUG -- : (1.5ms) COMMIT
=> true
p.reload
p.name
=> nil
p.errors.full_messages
=> []
答案 0 :(得分:0)
如果其他人遇到此问题,模型中的验证会阻止数据库更新。考虑到update_attribute
应绕过验证,这一点特别奇怪。
无论如何这里是罪魁祸首......
format: { with: URI::regexp(["http", "https"]) }
...删除了这个并且它有效。虽然不是很好的工作。