Уничтожение UpVotes на act_as_votable
У меня есть приложение rails, которое работает нормально, используя act_as_votable. Кнопка "Мне нравится" увеличивает количество сообщений, а затем переключается на кнопку "Мне не нравится", и это уменьшает количество сообщений.
Моя проблема в том, что с тех пор, как я начал использовать гем Public Activity, я не могу найти способ удалить лайки из фида. Я использовал следующий цикл в представлении индекса действий:
<% @activities.each do |activity| %>
<p>
<% if activity.trackable %>
<%= link_to activity.owner.name, activity.owner %>
<%= render_activity activity %>
<% end %>
</p>
<% end %>
Когда я удаляю комментарий, вся строка в ленте активности "FOO добавил комментарий к BAR" исчезает. Тем не менее, так как действия в качестве избирательного драгоценного камня на самом деле создают отрицательное голосование, а не разрушают его, строка "FOO like BAR" все еще появляется, и за ней последует "FOO unliked BAR".
Кто-нибудь знает, как я могу найти upvote с помощью current_user в конкретном сообщении, а затем уничтожить его?
Ниже приведен код моего контроллера для "как" и "в отличие":
def like
@ink.create_activity :like, owner: current_user
@ink.upvote_by current_user
redirect_to :back
end
def unlike
@ink.downvote_by current_user
redirect_to :back
end
Спасибо
3 ответа
Для любого, кто столкнется с этим в будущем, благодаря Element119, я в конечном итоге смог точно определить лайки текущих пользователей по конкретному посту с помощью нескольких переменных и поиска по всему миру. Затем я уничтожил точно определенные лайки.
def like
@post.create_activity :like,
owner: current_user,
recipient: @post.user
@post.upvote_by current_user
redirect_to :back
end
def unlike
@post.downvote_by current_user
@currentUserLikes = PublicActivity::Activity.where(trackable_id: @post.id, owner_id: current_user.id, key: "post.like")
@currentUserLikes.destroy_all
redirect_to :back
end
Я знаю, что на этот вопрос уже дан ответ, но идеальным и самым простым ответом было бы использование официального метода gem, который является unvote_by, он работает как для повышающих, так и понижающих голосов.
Похоже, что вы хотите сделать, это удалить аналогичные уведомления модели, когда она "не понравилась" - это правильно? Все, что вам нужно сделать, это найти соответствующую деятельность и уничтожить ее. Поскольку действия являются моделями, как и любые другие, вы можете сделать это с destroy
и / или destroy_all
,
Я не совсем уверен, как выглядит ваша модель public_activity, поэтому вместо того, чтобы привести конкретный пример, я свяжу вас с этим сообщением в списке рассылки для драгоценного камня, в котором приведены примеры удаления записей публичных действий.
Вы также можете найти полезным удалить запись по ее trackable_id
- например:
@activity = PublicActivity::Activity.find_by(trackable_id: (params[:id]), trackable_type: controller_path.classify)
@activity.destroy
Там больше информации о том, как это работает в этом ответе.