nathank
(Nathan Kershaw)
1
我使用了这段代码片段来尝试批量替换用户自定义字段中的一些数据。我参考了 Ning 导入器。
users=User.where("users.created_at <= '2019-09-13'::timestamp")
users.each do |u|
u.custom_fields = {"user_field_16" => "Nil"}
u.save
end
然而,这带来了意想不到的后果,即清除了用户其他自定义字段的值。
有人能建议一种从控制台修改用户自定义字段值的方法,而不会造成混乱吗?
1 个赞
我认为此格式仅更改了所讨论的自定义字段。我已对其进行了简短测试,似乎奏效了。
users=User.where("users.created_at <= '2019-09-13'::timestamp")
users.each do |u|
u.custom_fields["user_field_16"] = "Nil"
u.save
end
不过,如果您希望该字段为 NULL 而不是“Nil”,则可以尝试以下方法:
users=User.where("users.created_at <= '2019-09-13'::timestamp")
users.each do |u|
u.custom_fields["user_field_16"] = NIL
u.save
end
4 个赞
pfaffman
(Jay Pfaffman)
3
还有类似这样的东西:
UserCustomField.create(user_id: 1, name: "user_field_4",value: "Oops")
哦,但是如果它已经有一个值了,它会添加第二个!所以你可能需要
ucf=UserCustomField.find_by(user_id: name: 'user_field_4')
然后你需要更新它或创建一个新的。
但是如果你创建了多个,用户体验会显示它们用逗号分隔,并且如果它们通过用户体验编辑,当它们被保存时,它们会被保存回单个值。
你可以用以下方式查看它们:
UserCustomField.all
或者
UserCustomField.where(name: x)
这是我手机上的记忆,所以你的情况可能会有所不同。
fzngagan
(Faizaan Gagan)
5
通过这样做,您将用 {\"user_field_16\" =\u003e nil}(注意没有引号的 nil)替换 u.custom_fields 哈希中的所有内容。
nathank
(Nathan Kershaw)
7
我发现这是一个有用的工具,可以在您想在 Rails 控制台中操作这些 UCF 时获得正确的 Rails 语法:
如果您要替换该字段中的数据
UserCustomField.find_by(user_id: =UserID=, name: "=UserFieldName=").update(value: "=NewValue=")
(如果该字段中尚无数据,则会报错)
如果您是首次填写该字段
UserCustomField.create(user_id: =UserID=, name: "=UserFieldName=", value: "=NewValue=")
7 个赞
system
(system)
关闭
10
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.