Manipulando campos de usuário personalizados do console Rails

Usei este trecho de código para tentar substituir dados em massa em um campo personalizado de usuário. Eu o derivei do importador 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

No entanto, isso teve a consequência não intencional de apagar os outros valores de campo personalizado dos usuários.

Alguém pode sugerir uma maneira de modificar um valor de campo personalizado de usuário a partir do console que não cause caos?

1 curtida

Eu acho que este formato muda apenas o campo personalizado em questão. Testei brevemente e pareceu resolver o problema. :+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

Embora, se você quisesse que o campo fosse NULL em vez de “Nil”, você poderia tentar isto em vez disso:

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 curtidas

Também algo como

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

Ah, mas se já tiver um valor, ele adicionará um segundo! Então você pode

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

e então você precisaria atualizá-lo ou criar um novo.

Mas se você criar vários, a UX os mostrará separados por vírgula e, se forem editados pela UX, quando forem salvos, eles serão salvos de volta como um único valor.

Você pode dar uma olhada neles com

  UserCustomField.all

Ou

UserCustomField.where(name: x)

Isso é de memória no meu celular, então sua experiência pode variar.

Ao fazer isso, você está substituindo tudo no hash u.custom_fields por {\"user_field_16\" =\u003e nil} (note o nil sem aspas)

Obrigado - sim, era isso que eu deveria ter usado.

Sim, foi exatamente o que aconteceu. Senti-me bastante tolo depois!

2 curtidas

Acho esta uma ferramenta útil para acertar a sintaxe do Rails quando você quer manipular esses UCFs no console do Rails:

Se você estiver substituindo dados nesse campo
UserCustomField.find_by(user_id: =UserID=, name: "=UserFieldName=").update(value: "=NewValue=")

(dará um erro se ainda não houver dados nesse campo)

Se você estiver preenchendo esse campo pela primeira vez
UserCustomField.create(user_id: =UserID=, name: "=UserFieldName=", value: "=NewValue=")
7 curtidas

Como você criou esse conteúdo dinâmico na postagem?

Parece que a meta tem esse componente ativado. (Apenas um palpite)

3 curtidas

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