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.

Methods

Constants

FINALIZE_SETTINGS = superclass::FINALIZE_SETTINGS.merge( :array_type=>:array_type, :primary_key=>:primary_key, :primary_key_method=>:primary_key_method

Public Instance methods

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # File lib/sequel/plugins/pg_array_associations.rb, line 235
235:         def filter_by_associations_limit_strategy
236:           nil
237:         end

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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

The method to call to get value of the primary key of the associated model.

[Source]

     # File lib/sequel/plugins/pg_array_associations.rb, line 265
265:         def primary_key_method
266:           cached_fetch(:primary_key_method){primary_key}
267:         end

[Validate]