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
ただし、'Nil’ではなくNULLにしたい場合は、代わりにこちらを試すことができます。
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")
ああ、しかし、すでに値が存在する場合、2番目の値が追加されてしまいます!そのため、以下のようにする必要があるかもしれません。
ucf=UserCustomField.find_by(user_id: name: 'user_field_4')
そして、それを更新するか、新しく作成する必要があります。
しかし、複数の値を作成した場合、UXではそれらはカンマ区切りで表示され、UX経由で編集されると、保存時に単一の値に戻されます。
以下で確認できます。
UserCustomField.all
または
UserCustomField.where(name: x)
これは携帯電話からの記憶なので、実際とは異なる場合があります。
fzngagan
(Faizaan Gagan)
5
これにより、u.custom_fields ハッシュ内のすべてが {"user_field_16" => nil}(引用符なしのnilに注意)に置き換えられます。
nathank
(Nathan Kershaw)
6
ありがとうございます。はい、それを使うべきでした。
はい、まさにその通りになりました。後でとても愚かに感じました!
「いいね!」 2
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
j127
8
投稿内の動的なコンテンツはどのように作成しましたか?
Kuro22
9
メタにはこのコンポーネントがオンになっているようです。(推測ですが)
「いいね!」 3
system
(system)
クローズされました:
10
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.