diff --git a/lib/rolify.rb b/lib/rolify.rb index 6d2f4c16..2f7e3eed 100644 --- a/lib/rolify.rb +++ b/lib/rolify.rb @@ -24,10 +24,10 @@ def rolify(options = {}) self.role_join_table_name = options[:role_join_table_name] rolify_options = { :class_name => options[:role_cname].camelize } - rolify_options.merge!({ :join_table => self.role_join_table_name }) if Rolify.orm == "active_record" - rolify_options.merge!(options.reject{ |k,v| ![ :before_add, :after_add, :before_remove, :after_remove, :inverse_of ].include? k.to_sym }) + join_table_options = options.select{ |k,v| [ :as, :before_add, :after_add, :before_remove, :after_remove, :inverse_of ].include? k.to_sym } - has_and_belongs_to_many :roles, **rolify_options + has_many self.role_join_table_name.to_sym, dependent: :destroy, **join_table_options + has_many :roles, through: self.role_join_table_name.to_sym, **rolify_options self.adapter = Rolify::Adapter::Base.create("role_adapter", self.role_cname, self.name) diff --git a/lib/rolify/adapters/active_record/role_adapter.rb b/lib/rolify/adapters/active_record/role_adapter.rb index a1f01fb3..e6fab5c7 100644 --- a/lib/rolify/adapters/active_record/role_adapter.rb +++ b/lib/rolify/adapters/active_record/role_adapter.rb @@ -61,7 +61,8 @@ def remove(relation, role_name, resource = nil) cond[:resource_id] = resource.id if resource && !resource.is_a?(Class) roles = relation.roles.where(cond) if roles - relation.roles.delete(roles) + join_table = relation.class.reflect_on_association(:roles).options[:through] + relation.send(join_table).where(role_id: roles.ids).destroy_all roles.each do |role| role.destroy if role.send(ActiveSupport::Inflector.demodulize(user_class).tableize.to_sym).limit(1).empty? end if Rolify.remove_role_if_empty diff --git a/lib/rolify/adapters/base.rb b/lib/rolify/adapters/base.rb index 373ce6f2..00e94117 100644 --- a/lib/rolify/adapters/base.rb +++ b/lib/rolify/adapters/base.rb @@ -17,7 +17,7 @@ def user_class def role_table role_class.table_name end - + def self.create(adapter, role_cname, user_cname) load "rolify/adapters/#{Rolify.orm}/#{adapter}.rb" load "rolify/adapters/#{Rolify.orm}/scopes.rb"