[英]update_all with string concatenate
我正在尝试为我的所有用户更新'allowed_ips'字段,但是该字段无法正常运行。
'allowed_ips'是带有ip地址的字符串。
User.where(role: 1).update_all(:allowed_ips => ["CONCAT('allowed_ips', '192.168.0.1')"])
# output:
> user.allowed_ips
=> "CONCAT('allowed_ips', '192.168.0.1')"
我想要的是:
UPDATE 'users' SET 'allowed_ips' = CONCAT('allowed_ips', '192.168.0.1') WHERE 'role' = '1'
# output:
> user.allowed_ips
=> "127.0.0.1, 127.0.0.2, 192.168.0.1"
这应该可以解决问题:
User.where(role: 1).update_all(["allowed_ips = CONCAT(allowed_ips, ?)", '192.168.0.1'])
在您的情况下,“ CONCAT ...”仅被视为更新字段的字符串值。
顺便说一句,您可能还需要修复CONCAT调用本身,否则这些字符串将被粘在一起而没有定界符。
还要检查serialize
( 链接 )以在ActiveRecord模型属性中存储对象(例如,数组)。 这可能是获得想要实现的目标的一种更清洁的方法
CONCAT不应用引号引起来。 CONCAT中的allowed_ips不应用引号引起来。
User.where(role: 1).update_all("'allowed_ips' = CONCAT(allowed_ips, ', 192.168.0.1')")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.