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'
)