Je souhaite ajouter un champ personnalisé à un script d’importation. Ce champ est un menu déroulant.
Je suis tombé sur ce post, qui explique comment créer le champ initialement dans le cadre du processus d’importation :
Cela a fonctionné et le champ est créé correctement avec les options appropriées du menu déroulant.
Cependant, le code que j’utilise pour importer la valeur de ce champ ne fonctionne pas. Voici ce que j’utilise :
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
Le champ que j’importe est une chaîne de caractères, donc le code devrait s’exécuter. Cependant, lorsque j’exécute l’importation, rien n’est importé pour ce champ.
La valeur de user[“legacy_custom_field”] dans cet exemple est identique aux options créées pour ce champ, mais je ne valide pas les données importées par rapport aux options du menu déroulant. Dois-je le faire, ou peut-être ajouter les données différemment puisqu’il s’agit de sélectionner une option dans un menu déroulant ? Lorsque j’ai exploré la table user_custom_fields, ce texte semble être stocké sous forme de simple chaîne de caractères.
Qu’est-ce que je rate ? Merci d’avance si quelqu’un peut m’aider !
Je ne suis pas sûr de ce qui cloche dans votre code. Vous pourriez jeter un œil à l’importateur Ning, car il gère les champs personnalisés. Je recommanderais d’ajouter un puts après le if pour voir s’il est jamais exécuté.
Vous devrez peut-être faire un newuser.save!, mais je ne pense pas que ce soit obligatoire.
@pfaffman, c’est étrange, as-tu déjà rencontré des problèmes où newuser.save! désactive d’autres parties d’un script d’importation si tu l’utilises trop tôt ? Est-ce que cela termine quelque chose qui doit être réinitialisé pour que le reste du script fonctionne ?
J’ai remarqué qu’une fois cette ligne ajoutée, les avatars n’étaient plus importés, mais en commentant cette ligne, les avatars réapparaissaient sans problème. C’était littéralement le seul changement que j’avais apporté pour corriger le problème des avatars. Ce sont aussi des sections complètement différentes du script.
Est-ce que cela pourrait avoir un lien avec l’utilisation de newuser.save! par rapport à newuser.save sans le point d’exclamation à la fin ? Quand je termine plusieurs blocs de code avec newuser.save!, j’ai remarqué que seul le premier est réellement enregistré.