Модель черного списка в Rails 4
Я использую Act_as_votable для реализации системы голосования как / не нравится. Работает просто отлично.
Но сейчас я сталкиваюсь с проблемой, что нужно занести в черный список именно тот предмет, который получил не менее 30 голосов.
У меня есть модель рекламы. Это столбец in_blacklist со значением по умолчанию false. Я добавил поле in_blacklist, как это разрешено в контроллере рекламы. Я пробовал это до сих пор.
Ввиду:
<%= link_to "Like", like_advertisement_path(@advertisement), method: :put %> <%= @advertisement.get_likes.size %>)
(<%= link_to "Dislike", dislike_advertisement_path(@advertisement), method: :put %> <%= @advertisement.get_dislikes.size %>)
В контроллере:
def downvote
@advertisement.downvote_from current_user
flash[:notice] = 'Downvote added.' if @advertisement.vote_registered?
if @advertisement.get_dislikes.size == 30
@advertisement.in_blacklist = true
flash[:notice] = "#{@advertisement.name } added to blacklist. Information sent to #{@advertisement.user.email } "
respond_with(@advertisement)
else
respond_with(@advertisement)
end
end
Поэтому, когда я нажму 30-ю нелюбовь, сообщений об ошибках нет. И когда я проверяю, изменилось ли логическое значение, но нет, оно все равно ложно.
1 ответ
Решение
Вы забыли сохранить объект.
def downvote
@advertisement.downvote_from current_user
flash[:notice] = 'Downvote added.' if @advertisement.vote_registered?
if @advertisement.get_dislikes.size == 30
@advertisement.in_blacklist = true
@advertisement.save # there you go!
flash[:notice] = "#{@advertisement.name } added to blacklist. Information sent to #{@advertisement.user.email } "
respond_with(@advertisement)
else
respond_with(@advertisement)
end
end