| 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.sub(/\[\]\z/, '').freeze
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