Попытка добавить карму в act_as_votable

Я пытаюсь добавить карму в act_as_votable. Потерял! Пожалуйста помоги.

По сути, я голосую за/против, работая над статьями.

Я хотел бы добавить 1 к карме издателей каждый раз, когда за их статью проголосовали. (и вычтите 1, если один из них проголосовал против). Короче говоря, когда кто-то голосует за статью, статья получает голос, а издатель получает балл кармы.

У меня голосование статей работает просто отлично.

Я следовал этому руководству (https://masteruby.github.io/weekly-rails/2014/08/12/how-to-add-user-karma-to-rails-app.html), чтобы попытаться реализовать добавляя карму издателям, когда за статью голосуют, но я продолжаю получать эту ошибку в журналах.

NoMethodError - undefined method `increase_karma' for #<Publisher:0x000001055d6f00>

Я запускал миграции и перезапускал сервер несколько раз.

В моем контроллере статей (я также использую friendly_id)

def upvote
  @article = Article.find_by_slug(params[:id])
  @article.upvote_by current_user
  @article.publisher.increase_karma
  respond_to do |format|
    format.html { redirect_to :back }
    format.js { render layout: false }
  end
end

В моем контроллере издателей

  def increase_karma(count=1)
    update_attribute(:karma, karma + count)
  end

  def decrease_karma(count=1)
    update_attribute(:karma, karma - count)
  end

person Yesthe Cia    schedule 18.08.2016    source источник


Ответы (1)


Причина, по которой Rails выдает ошибку, заключается в том, что ваша модель издателя не имеет метода increase_karma.

Методы increase_karma и decrease_karma следует перенести в модель Publisher из контроллера Publisher, и это должно устранить ошибку.

  def increase_karma(count=1)
    update_attribute(:karma, karma + count)
  end

  def decrease_karma(count=1)
    update_attribute(:karma, karma - count)
  end
person Wraithseeker    schedule 20.08.2016
comment
Привет. Спасибо. Я заметил это примерно через час после того, как задал вопрос. Одна из тех ночей без достаточного количества кофе ;/ - person Yesthe Cia; 22.08.2016