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.

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!

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!

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.