Class: Sequel::Model::Associations::ManyToManyAssociationReflection
- Inherits:
-
AssociationReflection
- Object
- Hash
- AssociationReflection
- Sequel::Model::Associations::ManyToManyAssociationReflection
- Defined in:
- lib/sequel/model/associations.rb
Direct Known Subclasses
Plugins::ManyThroughMany::ManyThroughManyAssociationReflection
Constant Summary
Constant Summary
Constants included from Inflections
Inflections::CAMELIZE_CONVERT_REGEXP, Inflections::CAMELIZE_MODULE_REGEXP, Inflections::DASH, Inflections::DEMODULIZE_CONVERT_REGEXP, Inflections::EMPTY_STRING, Inflections::SLASH, Inflections::UNDERSCORE, Inflections::UNDERSCORE_CONVERT_REGEXP1, Inflections::UNDERSCORE_CONVERT_REGEXP2, Inflections::UNDERSCORE_CONVERT_REPLACE, Inflections::UNDERSCORE_MODULE_REGEXP, Inflections::VALID_CONSTANT_NAME_REGEXP
Instance Method Summary (collapse)
-
- (Object) associated_key_alias
The alias to use for the associated key when eagerly loading.
-
- (Object) associated_key_column
The column to use for the associated key when eagerly loading.
-
- (Object) associated_object_keys
Alias of right_primary_keys.
-
- (Boolean) can_have_associated_objects?(obj)
many_to_many associations can only have associated objects if none of the :left_primary_keys options have a nil value.
-
- (Object) default_associated_key_alias
The default associated key alias(es) to use when eager loading associations via eager.
-
- (Object) default_join_table
Default name symbol for the join table.
-
- (Object) default_left_key
Default foreign key name symbol for key in join table that points to current table's primary key (or :left_primary_key column).
-
- (Object) default_right_key
Default foreign key name symbol for foreign key in join table that points to the association's table's primary key (or :right_primary_key column).
-
- (Object) eager_loader_key
The key to use for the key hash when eager loading.
-
- (Object) eager_loading_predicate_key
(also: #qualified_left_key)
The hash key to use for the eager loading predicate (left side of IN (1, 2, 3)).
-
- (Boolean) eager_loading_use_associated_key?
many_to_many associations need to select a key in an associated table to eagerly load.
-
- (Object) join_table_alias
(also: #associated_key_table)
The join table itself, unless it is aliased, in which case this is the alias.
-
- (Object) join_table_source
The source of the join table.
-
- (Boolean) need_associated_primary_key?
Whether the associated object needs a primary key to be added/removed, true for many_to_many associations.
-
- (Object) qualified_right_key
The right key qualified by the join table.
-
- (Object) qualified_right_primary_key
#right_primary_key qualified by the associated table.
-
- (Object) reciprocal
Returns the reciprocal association symbol, if one exists.
-
- (Object) right_primary_key
The primary key column(s) to use in the associated table (can be symbol or array).
-
- (Object) right_primary_key_method
The method symbol or array of method symbols to call on the associated objects to get the foreign key values for the join table.
-
- (Object) right_primary_key_methods
The array of method symbols to call on the associated objects to get the foreign key values for the join table.
-
- (Object) right_primary_keys
The primary key columns to use in the associated table (always array).
-
- (Object) select
The columns to select when loading the association, associated_class.table_name.* by default.
Methods inherited from AssociationReflection
#_add_method, #_dataset_method, #_remove_all_method, #_remove_method, #_setter_method, #add_method, #associated_class, #association_method, #dataset_helper_method, #dataset_method, #dataset_need_primary_key?, #eager_graph_lazy_dataset?, #eager_limit_strategy, #limit_and_offset, #qualify, #qualify_assoc, #qualify_cur, #reciprocal_array?, #remove_all_method, #remove_before_destroy?, #remove_method, #remove_should_check_existing?, #returns_array?, #set_reciprocal_to_self?, #setter_method
Methods included from Inflections
clear, irregular, plural, singular, uncountable
Methods inherited from Hash
#&, #case, #hstore, #sql_expr, #sql_negate, #sql_or, #|, #~
Instance Method Details
- (Object) associated_key_alias
The alias to use for the associated key when eagerly loading
422 423 424 |
# File 'lib/sequel/model/associations.rb', line 422 def associated_key_alias self[:left_key_alias] end |
- (Object) associated_key_column
The column to use for the associated key when eagerly loading
427 428 429 |
# File 'lib/sequel/model/associations.rb', line 427 def associated_key_column self[:left_key] end |
- (Object) associated_object_keys
Alias of right_primary_keys
432 433 434 |
# File 'lib/sequel/model/associations.rb', line 432 def associated_object_keys right_primary_keys end |
- (Boolean) can_have_associated_objects?(obj)
many_to_many associations can only have associated objects if none of the :left_primary_keys options have a nil value.
438 439 440 |
# File 'lib/sequel/model/associations.rb', line 438 def can_have_associated_objects?(obj) !self[:left_primary_keys].any?{|k| obj.send(k).nil?} end |
- (Object) default_associated_key_alias
The default associated key alias(es) to use when eager loading associations via eager.
444 445 446 |
# File 'lib/sequel/model/associations.rb', line 444 def default_associated_key_alias self[:uses_left_composite_keys] ? (0...self[:left_keys].length).map{|i| :x_foreign_key_#{i}_x"} : :x_foreign_key_x end |
- (Object) default_join_table
Default name symbol for the join table.
449 450 451 |
# File 'lib/sequel/model/associations.rb', line 449 def default_join_table [self[:class_name], self[:model].name].map{|i| underscore(pluralize(demodulize(i)))}.sort.join('_').to_sym end |
- (Object) default_left_key
Default foreign key name symbol for key in join table that points to current table's primary key (or :left_primary_key column).
455 456 457 |
# File 'lib/sequel/model/associations.rb', line 455 def default_left_key :#{underscore(demodulize(self[:model].name))}_id" end |
- (Object) default_right_key
Default foreign key name symbol for foreign key in join table that points to the association's table's primary key (or :right_primary_key column).
461 462 463 |
# File 'lib/sequel/model/associations.rb', line 461 def default_right_key :#{singularize(self[:name])}_id" end |
- (Object) eager_loader_key
The key to use for the key hash when eager loading
466 467 468 |
# File 'lib/sequel/model/associations.rb', line 466 def eager_loader_key self[:eager_loader_key] ||= self[:left_primary_key] end |
- (Object) eager_loading_predicate_key Also known as: qualified_left_key
The hash key to use for the eager loading predicate (left side of IN (1, 2, 3)). The left key qualified by the join table.
472 473 474 |
# File 'lib/sequel/model/associations.rb', line 472 def eager_loading_predicate_key self[:eager_loading_predicate_key] ||= qualify(join_table_alias, self[:left_key]) end |
- (Boolean) eager_loading_use_associated_key?
many_to_many associations need to select a key in an associated table to eagerly load
483 484 485 |
# File 'lib/sequel/model/associations.rb', line 483 def eager_loading_use_associated_key? true end |
- (Object) join_table_alias Also known as: associated_key_table
The join table itself, unless it is aliased, in which case this is the alias.
498 499 500 501 502 503 |
# File 'lib/sequel/model/associations.rb', line 498 def join_table_alias fetch(:join_table_alias) do split_join_table_alias self[:join_table_alias] end end |
- (Object) join_table_source
The source of the join table. This is the join table itself, unless it is aliased, in which case it is the unaliased part.
489 490 491 492 493 494 |
# File 'lib/sequel/model/associations.rb', line 489 def join_table_source fetch(:join_table_source) do split_join_table_alias self[:join_table_source] end end |
- (Boolean) need_associated_primary_key?
Whether the associated object needs a primary key to be added/removed, true for many_to_many associations.
508 509 510 |
# File 'lib/sequel/model/associations.rb', line 508 def need_associated_primary_key? true end |
- (Object) qualified_right_key
The right key qualified by the join table.
478 479 480 |
# File 'lib/sequel/model/associations.rb', line 478 def qualified_right_key self[:qualified_right_key] ||= qualify(join_table_alias, self[:right_key]) end |
- (Object) qualified_right_primary_key
#right_primary_key qualified by the associated table
529 530 531 |
# File 'lib/sequel/model/associations.rb', line 529 def qualified_right_primary_key self[:qualified_right_primary_key] ||= qualify_assoc(right_primary_key) end |
- (Object) reciprocal
Returns the reciprocal association symbol, if one exists.
513 514 515 516 517 518 519 520 521 522 523 524 525 526 |
# File 'lib/sequel/model/associations.rb', line 513 def reciprocal return self[:reciprocal] if include?(:reciprocal) left_keys = self[:left_keys] right_keys = self[:right_keys] join_table = self[:join_table] associated_class.all_association_reflections.each do |assoc_reflect| if assoc_reflect[:type] == :many_to_many && assoc_reflect[:left_keys] == right_keys && assoc_reflect[:right_keys] == left_keys && assoc_reflect[:join_table] == join_table && assoc_reflect.associated_class == self[:model] return self[:reciprocal] = assoc_reflect[:name] end end self[:reciprocal] = nil end |
- (Object) right_primary_key
The primary key column(s) to use in the associated table (can be symbol or array).
534 535 536 |
# File 'lib/sequel/model/associations.rb', line 534 def right_primary_key self[:right_primary_key] ||= associated_class.primary_key end |
- (Object) right_primary_key_method
The method symbol or array of method symbols to call on the associated objects to get the foreign key values for the join table.
545 546 547 |
# File 'lib/sequel/model/associations.rb', line 545 def right_primary_key_method self[:right_primary_key_method] ||= right_primary_key end |
- (Object) right_primary_key_methods
The array of method symbols to call on the associated objects to get the foreign key values for the join table.
551 552 553 |
# File 'lib/sequel/model/associations.rb', line 551 def right_primary_key_methods self[:right_primary_key_methods] ||= Array(right_primary_key_method) end |
- (Object) right_primary_keys
The primary key columns to use in the associated table (always array).
539 540 541 |
# File 'lib/sequel/model/associations.rb', line 539 def right_primary_keys self[:right_primary_keys] ||= Array(right_primary_key) end |
- (Object) select
The columns to select when loading the association, associated_class.table_name.* by default.
556 557 558 559 |
# File 'lib/sequel/model/associations.rb', line 556 def select return self[:select] if include?(:select) self[:select] ||= Sequel::SQL::ColumnAll.new(associated_class.table_name) end |