Skip to content

Instantly share code, notes, and snippets.

@EppO
Created January 27, 2014 18:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save EppO/8654381 to your computer and use it in GitHub Desktop.
Save EppO/8654381 to your computer and use it in GitHub Desktop.
rolify callbacks
irb(main):001:0> f = Folk.first
Folk Load (0.2ms) SELECT "folks".* FROM "folks" ORDER BY "folks"."id" ASC LIMIT 1
=> #<Folk id: 1, email: "folk@rockandfolk.com", encrypted_password: "$2a$10$bBJsiFh52QCNi0enN57XeerS2M7Tx8TXWXOgO9xj9pS8...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2014-01-27 16:56:02", updated_at: "2014-01-27 16:56:02">
irb(main):002:0> f.add_role :staff
Role Load (0.2ms) SELECT "roles".* FROM "roles" WHERE "roles"."name" = 'staff' AND "roles"."resource_type" IS NULL AND "roles"."resource_id" IS NULL ORDER BY "roles"."id" ASC LIMIT 1
Role Exists (27.6ms) SELECT 1 AS one FROM "roles" INNER JOIN "folks_roles" ON "roles"."id" = "folks_roles"."role_id" WHERE "folks_roles"."folk_id" = ? AND "roles"."id" = 2 LIMIT 1 [["folk_id", 1]]
(0.2ms) SELECT "roles".id FROM "roles" INNER JOIN "folks_roles" ON "roles"."id" = "folks_roles"."role_id" WHERE "folks_roles"."folk_id" = ? [["folk_id", 1]]
Role Load (0.1ms) SELECT "roles".* FROM "roles" WHERE "roles"."id" IN (1, 2)
Role Load (0.1ms) SELECT "roles".* FROM "roles" INNER JOIN "folks_roles" ON "roles"."id" = "folks_roles"."role_id" WHERE "folks_roles"."folk_id" = ? [["folk_id", 1]]
(0.1ms) begin transaction
before_add: #<Role id: 2, name: "staff", resource_id: nil, resource_type: nil, created_at: "2014-01-27 18:13:00", updated_at: "2014-01-27 18:13:00">
(0.2ms) INSERT INTO "folks_roles" ("folk_id", "role_id") VALUES (1, 2)
after_add: #<Role id: 2, name: "staff", resource_id: nil, resource_type: nil, created_at: "2014-01-27 18:13:00", updated_at: "2014-01-27 18:13:00">
(51.2ms) commit transaction
=> #<Role id: 2, name: "staff", resource_id: nil, resource_type: nil, created_at: "2014-01-27 18:13:00", updated_at: "2014-01-27 18:13:00">
irb(main):003:0> f.remove_role :staff
Role Load (0.4ms) SELECT "roles".* FROM "roles" INNER JOIN "folks_roles" ON "roles"."id" = "folks_roles"."role_id" WHERE "folks_roles"."folk_id" = ? AND "roles"."name" = 'staff' [["folk_id", 1]]
(0.1ms) begin transaction
before_rm: #<Role id: 2, name: "staff", resource_id: nil, resource_type: nil, created_at: "2014-01-27 18:13:00", updated_at: "2014-01-27 18:13:00">
(0.4ms) DELETE FROM "folks_roles" WHERE "folks_roles"."folk_id" = 1 AND "folks_roles"."role_id" IN (2)
before_rm: #<Role id: 2, name: "staff", resource_id: nil, resource_type: nil, created_at: "2014-01-27 18:13:00", updated_at: "2014-01-27 18:13:00">
(57.7ms) commit transaction
(0.4ms) SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "folks" INNER JOIN "folks_roles" ON "folks"."id" = "folks_roles"."folk_id" WHERE "folks_roles"."role_id" = ? LIMIT 1) subquery_for_count [["role_id", 2]]
(0.1ms) begin transaction
(0.1ms) DELETE FROM "folks_roles" WHERE "folks_roles"."role_id" = 2
SQL (0.3ms) DELETE FROM "roles" WHERE "roles"."id" = ? [["id", 2]]
(4.4ms) commit transaction
=> #<ActiveRecord::AssociationRelation [#<Role id: 2, name: "staff", resource_id: nil, resource_type: nil, created_at: "2014-01-27 18:13:00", updated_at: "2014-01-27 18:13:00">]>
irb(main):004:0>
class Folk < ActiveRecord::Base
rolify before_add: :before_rolify, after_add: :after_rolify, before_remove: :before_rm, after_remove: :after_rm
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
def before_rolify(model)
Rails.logger.debug "before_add: #{model.inspect}"
end
def after_rolify(model)
Rails.logger.debug "after_add: #{model.inspect}"
end
def before_rm(model)
Rails.logger.debug "before_rm: #{model.inspect}"
end
def after_rm(model)
Rails.logger.debug "before_rm: #{model.inspect}"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment