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
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
-
#associated_key_alias ⇒ Object
The alias to use for the associated key when eagerly loading.
-
#associated_key_column ⇒ Object
The column to use for the associated key when eagerly loading.
-
#associated_object_keys ⇒ Object
Alias of right_primary_keys.
-
#can_have_associated_objects?(obj) ⇒ Boolean
many_to_many associations can only have associated objects if none of the :left_primary_keys options have a nil value.
-
#default_associated_key_alias ⇒ Object
The default associated key alias(es) to use when eager loading associations via eager.
-
#default_join_table ⇒ Object
Default name symbol for the join table.
-
#default_left_key ⇒ Object
Default foreign key name symbol for key in join table that points to current table’s primary key (or :left_primary_key column).
-
#default_right_key ⇒ Object
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).
-
#eager_loader_key ⇒ Object
The key to use for the key hash when eager loading.
-
#eager_loading_predicate_key ⇒ Object
(also: #qualified_left_key)
The hash key to use for the eager loading predicate (left side of IN (1, 2, 3)).
-
#eager_loading_use_associated_key? ⇒ Boolean
many_to_many associations need to select a key in an associated table to eagerly load.
-
#join_table_alias ⇒ Object
(also: #associated_key_table)
The join table itself, unless it is aliased, in which case this is the alias.
-
#join_table_source ⇒ Object
The source of the join table.
-
#need_associated_primary_key? ⇒ Boolean
Whether the associated object needs a primary key to be added/removed, true for many_to_many associations.
-
#qualified_right_key ⇒ Object
The right key qualified by the join table.
-
#qualified_right_primary_key ⇒ Object
#right_primary_key qualified by the associated table.
-
#reciprocal ⇒ Object
Returns the reciprocal association symbol, if one exists.
-
#right_primary_key ⇒ Object
The primary key column(s) to use in the associated table (can be symbol or array).
-
#right_primary_key_method ⇒ Object
The method symbol or array of method symbols to call on the associated objects to get the foreign key values for the join table.
-
#right_primary_key_methods ⇒ Object
The array of method symbols to call on the associated objects to get the foreign key values for the join table.
-
#right_primary_keys ⇒ Object
The primary key columns to use in the associated table (always array).
-
#select ⇒ Object
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, #sql_expr, #sql_negate, #sql_or, #|, #~
Instance Method Details
#associated_key_alias ⇒ Object
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 |
#associated_key_column ⇒ Object
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 |
#associated_object_keys ⇒ Object
Alias of right_primary_keys
432 433 434 |
# File 'lib/sequel/model/associations.rb', line 432 def associated_object_keys right_primary_keys end |
#can_have_associated_objects?(obj) ⇒ Boolean
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 |
#default_associated_key_alias ⇒ Object
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 |
#default_join_table ⇒ Object
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 |
#default_left_key ⇒ Object
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 |
#default_right_key ⇒ Object
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 |
#eager_loader_key ⇒ Object
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 |
#eager_loading_predicate_key ⇒ Object 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 |
#eager_loading_use_associated_key? ⇒ Boolean
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 |
#join_table_alias ⇒ Object 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 |
#join_table_source ⇒ Object
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 |
#need_associated_primary_key? ⇒ Boolean
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 |
#qualified_right_key ⇒ Object
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 |
#qualified_right_primary_key ⇒ Object
#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 |
#reciprocal ⇒ Object
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 |
#right_primary_key ⇒ Object
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 |
#right_primary_key_method ⇒ Object
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 |
#right_primary_key_methods ⇒ Object
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 |
#right_primary_keys ⇒ Object
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 |
#select ⇒ Object
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 |