Rails 4: создание правил для очков с использованием самоцвета

Я нахожусь в процессе преобразования системы голосования и репутации моего приложения из системы activerecord-reputation-система в заслугу, поскольку у последнего, похоже, гораздо более активная основная команда.

Я пытаюсь установить точечные правила для голосования по вопросам и ответам в моем приложении. В идеале, когда пользователь голосует за вопрос, правило распределяет баллы как по самому вопросу, так и по создателю вопроса.

Из заслуг readme в разделе о правилах точек я вижу этот пример:

score 15, on: 'reviews#create', to: [:reviewer, :reviewed]

Я понимаю, что :reviewer а также reviewed в этом примере те, которые получают очки, выделенные им. Однако, когда я пытаюсь это сделать в моем собственном point_rules.rb:

score 10, :on => 'questions#vote', :to => :question 

Я получаю следующую ошибку:

[merit] NoMethodError on `Question#question` (called from Merit::TargetFinder#other_target)

Я знаю, что я что-то здесь упускаю, но кто-то может сказать мне, что это?

2 ответа

Решение

Заслуга работает так:

Если вы определяете правило без указания кому, точки будут назначены current_user по умолчанию

score 15, on: 'reviews#create' # This is for current_user

Если вы хотите назначить точки пользователю за пределами current_user, укажите его

score 10, :on => 'questions#vote', to: :user

В приведенном выше примере, :user относится к методу question.user, который является автором вопроса, отличается от current_user, который проголосовал за это.

В случае OP на самом деле ActiveRecord Reputation и Merit предназначены для разных целей и не могут быть полностью взаимозаменяемы.

  1. ARP можно использовать на всех моделях, включая пользователей и не пользователей. Meirt только для пользователя.

  2. У заслуги есть еще один модуль для значка. ARP нет.

  3. В Merit есть модуль Rule, в котором вы можете определить все правила в одном месте, например, CanCan. Пока в ARP такого места нет.

  4. Вы будете иметь дело с моделями в основном в ARP. В Merit вы будете работать как с контроллером, так и с моделью.

Этот код работает для моего проекта с использованием заслуг.

score 10, :on => 'questions#vote'

score 10, :on => 'questions#vote', to: :user

Я использовал оба, потому что я не уверен, как их объединить. Мое приложение включает голоса за комментарии, и избиратель получит 10 баллов за голосование за комментарий, а владелец комментария также получит 10 баллов.

Надеюсь это поможет.

Другие вопросы по тегам