Class | Sequel::Plugins::PgArrayAssociations::PgArrayToManyAssociationReflection |
In: |
lib/sequel/plugins/pg_array_associations.rb
|
Parent: | Sequel::Model::Associations::AssociationReflection |
The AssociationReflection subclass for pg_array_to_many associations.
FINALIZE_SETTINGS | = | superclass::FINALIZE_SETTINGS.merge( :array_type=>:array_type, :primary_key=>:primary_key, :primary_key_method=>:primary_key_method |
# File lib/sequel/plugins/pg_array_associations.rb, line 189 189: def array_type 190: cached_fetch(:array_type) do 191: if (sch = self[:model].db_schema) && (s = sch[self[:key]]) && (t = s[:db_type]) 192: t 193: else 194: :integer 195: end 196: end 197: end
An array containing the primary key for the associated model.
# File lib/sequel/plugins/pg_array_associations.rb, line 200 200: def associated_object_keys 201: Array(primary_key) 202: end
pg_array_to_many associations can only have associated objects if the array field is not nil or empty.
# File lib/sequel/plugins/pg_array_associations.rb, line 206 206: def can_have_associated_objects?(obj) 207: v = obj.get_column_value(self[:key]) 208: v && !v.empty? 209: end
pg_array_to_many associations do not need a primary key.
# File lib/sequel/plugins/pg_array_associations.rb, line 212 212: def dataset_need_primary_key? 213: false 214: end
Use a default key name of *_ids, for similarity to other association types that use *_id for single keys.
# File lib/sequel/plugins/pg_array_associations.rb, line 218 218: def default_key 219: 220: "#{singularize(self[:name])}_ids" 221: end
Always use the ruby eager_graph limit strategy if association is limited.
# File lib/sequel/plugins/pg_array_associations.rb, line 223 223: def eager_graph_limit_strategy(_) 224: :ruby if self[:limit] 225: end
Always use the ruby eager limit strategy
# File lib/sequel/plugins/pg_array_associations.rb, line 228 228: def eager_limit_strategy 229: cached_fetch(:_eager_limit_strategy) do 230: :ruby if self[:limit] 231: end 232: end
# File lib/sequel/plugins/pg_array_associations.rb, line 269 269: def filter_by_associations_conditions_expression(obj) 270: ds = filter_by_associations_conditions_dataset.where(filter_by_associations_conditions_subquery_conditions(obj)) 271: Sequel.function(:coalesce, Sequel.pg_array(filter_by_associations_conditions_key).overlaps(ds), Sequel::SQL::Constants::FALSE) 272: end
Don‘t use a filter by associations limit strategy
# File lib/sequel/plugins/pg_array_associations.rb, line 235 235: def filter_by_associations_limit_strategy 236: nil 237: end
# File lib/sequel/plugins/pg_array_associations.rb, line 244 244: def finalize_settings 245: FINALIZE_SETTINGS 246: end
Handle silent failure of add/remove methods if raise_on_save_failure is false and save_after_modify is true.
# File lib/sequel/plugins/pg_array_associations.rb, line 250 250: def handle_silent_modification_failure? 251: self[:raise_on_save_failure] == false && self[:save_after_modify] 252: end
A qualified version of the associated primary key.
# File lib/sequel/plugins/pg_array_associations.rb, line 255 255: def predicate_key 256: cached_fetch(:predicate_key){qualify_assoc(primary_key)} 257: end
The primary key of the associated model.
# File lib/sequel/plugins/pg_array_associations.rb, line 260 260: def primary_key 261: cached_fetch(:primary_key){associated_class.primary_key || raise(Error, "no primary key specified for #{associated_class.inspect}")} 262: end