彼はすぐ近くにいるので幸運です:wink:。
データ形式は興味深いものでした。2つの異なる形式で、ある日変更されました。最初は次のようになりました。
this
that
そしてある日、突然次のように変更されました。
this,that
新しいマルチセレクトフィールド(上記)のようにデータを変換するために、醜いスプレッドシートマジックを使いました。残念ながら、このスクリプトは(まだ)マルチセレクトを処理できません。PRは誰か?
回避策/ハックで対応できますが、次のように思います。
1回目のパス:既存のスクリプトを使用して単一のエントリを持つすべてのユーザー
2回目のパス:ハックされたスクリプトを使用して複数のエントリを持つすべてのユーザー。これにより新しい行が強制されます。
後で…
私の巧妙な計画はうまくいきました。
これは2回目のパス用のハックされたスクリプトです。
# frozen_string_literal: true
require "csv"
desc "Import user fields"
task "multi_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 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
@pfaffman - 将来UCFをいじる他の人のために、実際のスクリプトをマルチセレクトフィールドを処理するように更新するのはどれくらい簡単ですか?