繁体   English   中英

update_all与字符串连接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM