从 Rails 控制台操作自定义用户字段

我使用了这段代码片段来尝试批量替换用户自定义字段中的一些数据。我参考了 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 个赞

我认为此格式仅更改了所讨论的自定义字段。我已对其进行了简短测试,似乎奏效了。:+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 个赞

还有类似这样的东西:

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)

这是我手机上的记忆,所以你的情况可能会有所不同。

通过这样做,您将用 {\"user_field_16\" =\u003e nil}(注意没有引号的 nil)替换 u.custom_fields 哈希中的所有内容。

谢谢 - 是的,这正是我应该使用的。

是的,这正是我所发生的情况。之后我感觉很愚蠢!

2 个赞

我发现这是一个有用的工具,可以在您想在 Rails 控制台中操作这些 UCF 时获得正确的 Rails 语法:

如果您要替换该字段中的数据
UserCustomField.find_by(user_id: =UserID=, name: "=UserFieldName=").update(value: "=NewValue=")

(如果该字段中尚无数据,则会报错)

如果您是首次填写该字段
UserCustomField.create(user_id: =UserID=, name: "=UserFieldName=", value: "=NewValue=")
7 个赞

您是如何在帖子中创建动态内容的?

看起来 meta 有这个组件。 (只是猜测

3 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.