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 предназначены для разных целей и не могут быть полностью взаимозаменяемы.
ARP можно использовать на всех моделях, включая пользователей и не пользователей. Meirt только для пользователя.
У заслуги есть еще один модуль для значка. ARP нет.
В Merit есть модуль Rule, в котором вы можете определить все правила в одном месте, например, CanCan. Пока в ARP такого места нет.
Вы будете иметь дело с моделями в основном в ARP. В Merit вы будете работать как с контроллером, так и с моделью.
Этот код работает для моего проекта с использованием заслуг.
score 10, :on => 'questions#vote'
score 10, :on => 'questions#vote', to: :user
Я использовал оба, потому что я не уверен, как их объединить. Мое приложение включает голоса за комментарии, и избиратель получит 10 баллов за голосование за комментарий, а владелец комментария также получит 10 баллов.
Надеюсь это поможет.