是否有办法批量更新用户信息?我想做的是导出用户数据更新信息(如姓名等),然后将其导回数据库,更新现有信息。
我可以从管理面板下载 CSV,但我想知道如何将这些信息导回 Discourse。
我一直在费力地在管理端更新每个用户(姓名字段),但当我返回时,更新似乎是空白的。
是否有办法批量更新用户信息?我想做的是导出用户数据更新信息(如姓名等),然后将其导回数据库,更新现有信息。
我可以从管理面板下载 CSV,但我想知道如何将这些信息导回 Discourse。
我一直在费力地在管理端更新每个用户(姓名字段),但当我返回时,更新似乎是空白的。
最好的方法可能是使用 API,不过你也可以用一个脚本来读取你的 CSV 文件并在 Rails 中进行更新。
这是一个用于更新自定义用户字段的 rake 任务,可以进行修改以更新其他内容:
require "csv"
desc "Import user fields"
task "user_fields:import_csv", [:filename] => [:environment] do |_task, args|
puts "Filename: #{args[:filename]}"
data = CSV.read(args[:filename], headers: true)
data.each_entry do |row|
puts "doing row."
row.to_h.each do |x|
user_id = row["user_id"]
if x.first == "user_id"
u = User.find(user_id)
puts "Got user: #{u.username}"
else
name = x.first
val = row[x.first]
ucf = UserCustomField.find_by(user_id: row["user_id"], name: name)
if ucf
if val != ucf.value
puts "Updating UCF: #{row["user_id"]} Name: #{name}, Found #{ucf.value}}"
ucf.update(value: val)
end
else
if val
puts "Creating UCF: #{row["user_id"]} Name: #{name}, value: #{val}"
UserCustomField.create(user_id: user_id, name: name, value: val)
end
end
end
end
end
end
修改后,将其放入容器内的 /var/www/discourse/lib/tasks 中,然后运行 rake user_fields:import_csv["YOUR-CSV.csv"]。
如果你需要帮助修改以满足你的需求,请将你的 CSV 文件(或至少是标题和前几行)通过电子邮件发送给我,我会给你一个估价。
这是GitHub上的相同脚本:
请注意,目前它只处理用户自定义字段,而不处理姓名等字段。
这可能是因为您没有在每次编辑结束时点击“保存”。这是一个UI问题,希望有一天能得到解决!
它是否适用于包含空格的列,还是字段应该使用下划线?另外,导出时第一列的标题是 id 而不是 user_id。这有问题吗?
它们的名字是 user_field_1。这在上面链接的 github 仓库中有所解释。
该脚本并非设计用于消耗用户数据下载。您需要修改几个列标题。此外,目前该脚本仅更新存储在 custom_fields 表中的项目。