Adicionar curtidas programaticamente?

Durante a importação para o Discourse, uma postagem importante perdeu 100 curtidas na transição (falhei em raspá-la corretamente). Prefiro não executar o script de importação novamente neste caso.

Se eu tiver a lista de usuários que curtiram a postagem, qual é a melhor maneira de adicioná-los? Existe um comando rake?

O que eu faria seria olhar o script de importação que importa os likes para ver o que ele faz para adicionar os likes, então faria isso no console do Rails. Tenho quase certeza que é uma PostAction.

Tenho quase certeza de que não existe tal comando rake, pois é uma solicitação bastante incomum (principalmente, eu apenas reexecutaria o script de importação), mas não procurei.

3 curtidas

Obrigado pela resposta. Estou receoso de executar o script de importação novamente, pois já se passaram quase 6 meses e não tenho certeza de que tipo de efeitos colaterais ele pode ter em casos extremos onde dados antigos interagem com dados novos.

Aqui está a função auxiliar que usei em meu script de importação.

Aqui está o código relevante

created_by = User.find_by(id: user_id_from_imported_user_id(params[:user_id]))
post = Post.find_by(id: post_id_from_imported_post_id(params[:post_id]))

if created_by && post
          PostActionCreator.create(created_by, post, :like, created_at: params[:created_at])
          created += 1
...

Executarei algo semelhante a isto. Obrigado!

3 curtidas

Eu também ficaria bastante nervoso!

Eba! Você nunca sabe se fornecer uma resposta vaga como “Bem, o que eu faria…” será útil.

Se você for colar coisas no console do Rails, um truque útil é que, se você terminar suas linhas com um ;, não será levado para um paginador less para ver os resultados da última instrução. (Se você escrever um loop adequado ou executar um script, não precisará desta dica.)

Boa sorte!

2 curtidas

Se alguém quiser fazer isso, aqui está o que funcionou para mim. Abra o console do Rails e execute:

p = Post.find(31871)
u = User.find_by(username:"xxx")
PostActionCreator.create(u, p, :like, created_at: Time.now)

Obviamente, você terá que trocar o ID da postagem e o nome de usuário.

2 curtidas

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