Manipulando campos de usuario personalizados desde la consola de Rails

Usé este fragmento de código para intentar reemplazar datos en masa en un campo personalizado de usuario. Lo derivé del importador de 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

Sin embargo, tuvo la consecuencia no deseada de borrar los otros valores de campos personalizados de los usuarios.

¿Alguien puede sugerir una forma de modificar el valor de un campo personalizado de usuario desde la consola que no cause caos?

1 me gusta

Creo que este formato solo cambia el campo personalizado en cuestión. Lo he probado brevemente y parece que funcionó. :+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

Aunque si quisieras que el campo fuera NULL en lugar de decir ‘Nil’, podrías intentar esto en su lugar:

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 Me gusta

También algo como

UserCustomField.create(user_id: 1, name: "user_field_4",value: "Oops")

Oh, pero si ya tiene un valor, ¡añadirá un segundo! Así que podrías

 ucf=UserCustomField.find_by(user_id: name: 'user_field_4')

y luego tendrías que actualizarlo o crear uno nuevo.

Pero si creas varios, la experiencia de usuario los mostrará separados por comas y si se editan a través de la experiencia de usuario cuando se guardan, se guardan de nuevo como un solo valor.

Puedes echarles un vistazo con

  UserCustomField.all

O

UserCustomField.where(name: x)

Eso es de memoria en mi teléfono, así que tu experiencia puede variar.

Al hacer esto, estás reemplazando todo en el hash u.custom_fields con {\"user_field_16\" =\u003e nil} (nota el nil sin comillas)

Gracias, sí, eso es lo que debería haber usado.

Sí, eso es exactamente lo que sucedió. ¡Me sentí bastante tonto después!

2 Me gusta

Encuentro que esta es una herramienta útil para obtener la sintaxis de Rails correcta cuando se desean manipular estos UCF en la consola de Rails:

Si está reemplazando datos en ese campo
UserCustomField.find_by(user_id: =UserID=, name: "=UserFieldName=").update(value: "=NewValue=")

(dará un error si aún no hay datos en ese campo)

Si está completando ese campo por primera vez
UserCustomField.create(user_id: =UserID=, name: "=UserFieldName=", value: "=NewValue=")
7 Me gusta

¿Cómo creaste ese contenido dinámico en la publicación?

Parece que meta tiene este componente activado. (Solo estoy adivinando)

3 Me gusta

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