加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 模型中的Rails字符串字段不保存

发布时间:2020-12-17 01:32:55 所属栏目:百科 来源:网络整理
导读:video = Video.find(79)video.url.sub! "http","https"video.save 看看我的服务器控制台,当我发出这个请求时,我看到了这个: Video Load (48.7ms) SELECT `videos`.* FROM `videos` WHERE `videos`.`id` = 79 LIMIT 1(43.3ms) BEGIN(46.4ms) COMMIT 注意,即
video = Video.find(79)
video.url.sub! "http","https"
video.save

看看我的服务器控制台,当我发出这个请求时,我看到了这个:

Video Load (48.7ms)  SELECT `videos`.* FROM `videos` WHERE `videos`.`id` = 79 LIMIT 1
(43.3ms)  BEGIN
(46.4ms)  COMMIT

注意,即使子命令成功找到匹配并进行替换,也不会进行UPDATE调用.

但是,做:

video.url = "https://example.com"
video.save

我知道了:

(40.6ms)  BEGIN
SQL (41.8ms)  UPDATE `videos` SET `url` = "https://example.com",`updated_at` = '2014-03-18 14:52:22' WHERE `videos`.`id` = 79
(57.8ms)  COMMIT

我一直在与这个无休止的斗争.有谁知道发生了什么?

解决方法

因为您使用sub!就地修改了字符串,所以Active Record为您生成的url =方法永远不会被调用,所以它不知道您已经修改过它.

您可以使用video.url = video.url.sub …方法,也可以使用attribute_will_change!该特定属性的方法:

video = Video.find(79)
video.url_will_change!
video.url.sub! "http","https"
video.save

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读