Модель черного списка в 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
Другие вопросы по тегам