2015-07-09 2 views
4

Только что получил драгоценный камень за заслуги и работает с моим рельсом 4 приложения.Merit rails 4 не работает для действия по обновлению

До сих пор пользователь получает первый значок при создании субчастицы.

Второй значок, который я пытаюсь присудить, - это когда эта субартикул фактически одобряется, что может быть сделано только администратором. Я попытался использовать subarticle#update как действие, но он не награждает пользователя значком. Возможно, это связано с тем, что администратор обновляет субартикулу с панели администратора (rails admin gem)?

Вот мой значок в инициализаторе:

Merit::Badge.create!(
    id: 2, 
    name: "Serious Writer", 
    description: "Things are gettin' serious! You have successfully written an approved article." 
) 

и здесь правила:

grant_on ['subarticles#update','subarticles#destroy'], badge_id: 2, badge:'serious writer', to: :user, temporary: true do |subarticle| 
    subarticle.user.subarticles.approved.count >= 1 
end 

Любые предложения? Еще новичок в этой драгоценности, поэтому, возможно, это простая ошибка.

+0

Вы, возможно, потребуется переопределить рельсы администратора контроллера, как мы делаем с Devise https://github.com/merit-gem/merit/wiki/How-to-grant-badges-on-user-registration -при-Разрабатывают. Кроме того, 'grant_on', вероятно, должен быть вызван для' 'admin/subarticles # update''. – TuteC

+0

Знаете ли вы, какой класс я бы назначил контроллеру? Для разработки его 'Users :: RegistrationsController Kathan

+0

Это, похоже, не сработало. Значок отлично выделяется при обновлении субчастицы из обычной формы (edit.html.erb), но что-то пойдет не так, когда вы делаете с панели администратора @TuteC – Kathan

ответ

2

Какая у вас настройка, например, для одобрения статьи? Вы можете сделать это в своих контроллерах, но я бы предпочел сохранить их тощий и сделать логику в ваших моделях жира.

Обратите внимание, что есть другие способы сделать это, но вот что я сделал в прошлом.

class Subarticles < ActiveRecord::Base 
    ... 
    after_update :provide_badge_when_approved 

    private 

    def provide_badge_when_approved 
    self.user.add_badge(2) if (self.approved_changed? && self.approved == true) 
    end 
    ... 
end 
+0

Это то, что я использую для утверждения субчастицы: 'scope: approved, -> {where (: approved => true)}', который находится внутри моей модели субчастицы. Затем он будет отображаться только в том случае, если одобренный флажок проверяется администратором внутри панели администратора (rails admin gem). Кроме того, субчастицы вложены в статьи. Позвольте мне поиграть с тем, что вы мне дали. Я думаю, это может сработать. Спасибо! @Andrewcpkelley – Kathan

+0

@ Kathan Дайте мне знать, если это сработает. Я добавил чек, чтобы проверить, был ли измененный атрибут изменен с false на true. –

Смежные вопросы