From 5bf00707759c5baf98a6e1eb7742cec2219d93b3 Mon Sep 17 00:00:00 2001 From: Raphael Date: Wed, 24 Nov 2021 19:59:52 +0100 Subject: [PATCH 1/3] Use has_many :through instead of has_and_belongs_to_many --- lib/rolify.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/rolify.rb b/lib/rolify.rb index 6d2f4c16..10b3581d 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 }) - has_and_belongs_to_many :roles, **rolify_options + has_many self.role_join_table_name.to_sym + 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) From d8424e8462140d303ae24341a19b16263e349e4f Mon Sep 17 00:00:00 2001 From: Raphael Date: Wed, 24 Nov 2021 20:01:04 +0100 Subject: [PATCH 2/3] Add support for polymorphic associations in the join table of the `rolify` method --- lib/rolify.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/rolify.rb b/lib/rolify.rb index 10b3581d..8606e54a 100644 --- a/lib/rolify.rb +++ b/lib/rolify.rb @@ -26,7 +26,10 @@ def rolify(options = {}) rolify_options = { :class_name => options[:role_cname].camelize } rolify_options.merge!(options.reject{ |k,v| ![ :before_add, :after_add, :before_remove, :after_remove, :inverse_of ].include? k.to_sym }) - has_many self.role_join_table_name.to_sym + join_table_options = { } + join_table_options.merge!(options.reject{ |k,v| ![ :as ].include? k.to_sym }) + + has_many self.role_join_table_name.to_sym, **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) From 42cd97f3a33d4cdc7c72e308fe76e49bd3b0f100 Mon Sep 17 00:00:00 2001 From: Raphael Date: Tue, 30 Nov 2021 14:32:07 +0100 Subject: [PATCH 3/3] Use dependent: :destroy for join table association --- lib/rolify.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rolify.rb b/lib/rolify.rb index 8606e54a..3e5df3f7 100644 --- a/lib/rolify.rb +++ b/lib/rolify.rb @@ -29,7 +29,7 @@ def rolify(options = {}) join_table_options = { } join_table_options.merge!(options.reject{ |k,v| ![ :as ].include? k.to_sym }) - has_many self.role_join_table_name.to_sym, **join_table_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)