レガシーフォーラムソフトウェアからのカスタムユーザープロフィールフィールドのインポート

カスタムフィールドをインポートスクリプトに追加したいと考えています。そのフィールドはドロップダウン形式です。

この投稿を見つけました。インポートプロセスの一部としてフィールドを最初に作成する方法が記載されています。

動作し、適切なドロップダウンオプションと共にフィールドが正常に作成されました。

しかし、そのフィールド値をインポートするために使用しているコードが機能しません。以下が使用しているコードです。

  post_create_action: proc do |newuser|
    if user["legacy_custom_field"].is_a?(String)
      newuser.custom_fields = {"user_field_#{@legacy_field.id}" => user["legacy_custom_field"]}
    end
  end

インポートするフィールドは文字列なので、コードは実行されるはずです。しかし、インポートを実行すると、そのフィールドについては何もインポートされません。

この例での user[“legacy_custom_field”] の値は、このフィールド用に作成されたオプションと同一ですが、インポートされたデータをドロップダウンオプションに対して検証していません。それを行う必要があるのでしょうか、それともドロップダウンから選択するデータであるため、異なる方法でデータを追加する必要があるのでしょうか?user_custom_fields テーブルを調査したところ、このテキストは結局単純な文字列として格納されているように見えました。

何が足りないのでしょうか?お手伝いいただける方がいれば、事前に感謝いたします!:+1:

コードの何が問題かよくわかりません。カスタムフィールドを実装している Ning インポーターを参照してみてください。条件分岐の直後に puts を追加して、そのブロックが実際に実行されているか確認することをお勧めします。

newuser.save! が必要になる可能性はありますが、必要ない と思います。

newuser.save! を既存のコードの後に追加するだけで済みました。

ヒントをありがとう!今は問題なく動いています。

@pfaffman、これは奇妙ですね。newuser.save! を早期に使用すると、インポートスクリプトの他の部分が機能しなくなるような問題に遭遇したことはありますか?それによって、スクリプトの残りを動作させるために再初期化が必要な処理が終了してしまうのでしょうか?

その行を追加したところ、アバターがインポートされなくなりましたが、その行をコメントアウトするとアバターが正常にインポートされるようになりました。アバターの問題を修正するために私が行った変更はそれだけでした。しかも、これらはスクリプトの全く異なるセクションです。:thinking:

これは、末尾に「!」を付けた newuser.save! と付けない newuser.save の使い分けに関連している可能性がありますか?複数のコードブロックを newuser.save! で終了させた際、実際に保存されるのは最初のブロックだけであることに気づきました。