当前位置 : 主页 > 编程语言 > ruby >

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

来源:互联网 收集:自由互联 发布时间:2021-06-23
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) BEG
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
网友评论