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

ただし、'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

また、以下のようなものもあります。

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)

これは携帯電話からの記憶なので、実際とは異なる場合があります。

これにより、u.custom_fields ハッシュ内のすべてが {"user_field_16" => nil}(引用符なしのnilに注意)に置き換えられます。

ありがとうございます。はい、それを使うべきでした。

はい、まさにその通りになりました。後でとても愚かに感じました!

「いいね!」 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

投稿内の動的なコンテンツはどのように作成しましたか?

メタにはこのコンポーネントがオンになっているようです。(推測ですが)

「いいね!」 3

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