0

I have a rails app using devise, rails 4 and ruby 2.1.0. Devise is using the user model with config.scoped_views = true. I have followed the this wiki for setting up merit using devise. When a user registers the badge is not added to the database - it does work if I manually add the badge in the create action using current_user.add_badge('1') and I can display the badge in a view. I have posted the relevant code below, if someone could tell me what I am missing? Merit offers awesome functionality and I would really like to get it working - thanks!

app/controllers/users/registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController
  def create
    @user = build_resource # Needed for Merit
    super
  end

  def update
    @user = resource # Needed for Merit
    super
  end
end

app/models/user.rb

class User < ActiveRecord::Base
  has_merit

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

config/routes.rb

Rails.application.routes.draw do
  devise_for :users, controllers: { registrations: 'users/registrations' }
end

app/models/merit/badge_rules.rb

module Merit
  class BadgeRules
    include Merit::BadgeRulesMethods

    def initialize
      grant_on 'registrations#create', badge: 'just-registered', model_name: 'User'
    end
  end
end

config/initializers/merit.rb

Merit.setup do |config|
  config.checks_on_each_request = true
end

Badge.create!(
  id: 1,
  name: 'just-registered'
)
mjwb
  • 1

0 Answers0