# File lib/sequel/plugins/pg_array_associations.rb, line 135 def primary_key self[:primary_key] end
class Sequel::Plugins::PgArrayAssociations::ManyToPgArrayAssociationReflection
The AssociationReflection subclass for many_to_pg_array associations.
Public Instance Methods
# File lib/sequel/plugins/pg_array_associations.rb, line 78 def array_type cached_fetch(:array_type) do if (sch = associated_class.db_schema) && (s = sch[self[:key]]) && (t = s[:db_type]) t else :integer end end end
The array column in the associated model containing foreign keys to the current model.
# File lib/sequel/plugins/pg_array_associations.rb, line 90 def associated_object_keys [self[:key]] end
many_to_pg_array associations can have associated objects as long as they have a primary key.
# File lib/sequel/plugins/pg_array_associations.rb, line 96 def can_have_associated_objects?(obj) obj.get_column_value(self[:primary_key]) end
Assume that the key in the associated table uses a version of the current model's name suffixed with _ids.
# File lib/sequel/plugins/pg_array_associations.rb, line 102 def default_key :"#{underscore(demodulize(self[:model].name))}_ids" end
Always use the ruby eager_graph limit strategy if association is limited.
# File lib/sequel/plugins/pg_array_associations.rb, line 107 def eager_graph_limit_strategy(_) :ruby if self[:limit] end
Always use the ruby eager limit strategy
# File lib/sequel/plugins/pg_array_associations.rb, line 112 def eager_limit_strategy cached_fetch(:_eager_limit_strategy) do :ruby if self[:limit] end end
Don't use a filter by associations limit strategy
# File lib/sequel/plugins/pg_array_associations.rb, line 119 def filter_by_associations_limit_strategy nil end
Handle silent failure of add/remove methods if raise_on_save_failure is false.
# File lib/sequel/plugins/pg_array_associations.rb, line 124 def handle_silent_modification_failure? self[:raise_on_save_failure] == false end
The hash key to use for the eager loading predicate (left side of IN (1, 2, 3))
# File lib/sequel/plugins/pg_array_associations.rb, line 129 def predicate_key cached_fetch(:predicate_key){qualify_assoc(self[:key_column])} end
The column in the current table that the keys in the array column in the associated table reference.
Destroying the associated object automatically removes the association, since the association is stored in the associated object.
# File lib/sequel/plugins/pg_array_associations.rb, line 141 def remove_before_destroy? false end
Private Instance Methods
The predicate condition to use for the eager_loader.
# File lib/sequel/plugins/pg_array_associations.rb, line 148 def eager_loading_predicate_condition(keys) Sequel.pg_array_op(predicate_key).overlaps(Sequel.pg_array(keys, array_type)) end
# File lib/sequel/plugins/pg_array_associations.rb, line 152 def filter_by_associations_add_conditions_dataset_filter(ds) key = qualify(associated_class.table_name, self[:key]) ds.select{unnest(key)}.exclude(key=>nil) end
# File lib/sequel/plugins/pg_array_associations.rb, line 157 def filter_by_associations_conditions_key qualify(self[:model].table_name, primary_key) end
Only consider an association as a reciprocal if it has matching keys and primary keys.
# File lib/sequel/plugins/pg_array_associations.rb, line 163 def reciprocal_association?(assoc_reflect) super && self[:key] == assoc_reflect[:key] && primary_key == assoc_reflect.primary_key end
# File lib/sequel/plugins/pg_array_associations.rb, line 167 def reciprocal_type :pg_array_to_many end
# File lib/sequel/plugins/pg_array_associations.rb, line 171 def use_placeholder_loader? false end