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_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
410 411 412 |
# File 'lib/sequel/model/associations.rb', line 410 def associated_key_alias self[:left_key_alias] end |
#associated_key_column ⇒ Object
The column to use for the associated key when eagerly loading
415 416 417 |
# File 'lib/sequel/model/associations.rb', line 415 def associated_key_column self[:left_key] end |
#associated_object_keys ⇒ Object
Alias of right_primary_keys
420 421 422 |
# File 'lib/sequel/model/associations.rb', line 420 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.
426 427 428 |
# File 'lib/sequel/model/associations.rb', line 426 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.
432 433 434 |
# File 'lib/sequel/model/associations.rb', line 432 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.
437 438 439 |
# File 'lib/sequel/model/associations.rb', line 437 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).
443 444 445 |
# File 'lib/sequel/model/associations.rb', line 443 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).
449 450 451 |
# File 'lib/sequel/model/associations.rb', line 449 def default_right_key :"#{singularize(self[:name])}_id" end |
#eager_loader_key ⇒ Object
The key to use for the key hash when eager loading
454 455 456 |
# File 'lib/sequel/model/associations.rb', line 454 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.
460 461 462 |
# File 'lib/sequel/model/associations.rb', line 460 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
471 472 473 |
# File 'lib/sequel/model/associations.rb', line 471 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.
486 487 488 489 490 491 |
# File 'lib/sequel/model/associations.rb', line 486 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.
477 478 479 480 481 482 |
# File 'lib/sequel/model/associations.rb', line 477 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.
496 497 498 |
# File 'lib/sequel/model/associations.rb', line 496 def need_associated_primary_key? true end |
#qualified_right_key ⇒ Object
The right key qualified by the join table.
466 467 468 |
# File 'lib/sequel/model/associations.rb', line 466 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
517 518 519 |
# File 'lib/sequel/model/associations.rb', line 517 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.
501 502 503 504 505 506 507 508 509 510 511 512 513 514 |
# File 'lib/sequel/model/associations.rb', line 501 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).
522 523 524 |
# File 'lib/sequel/model/associations.rb', line 522 def right_primary_key self[:right_primary_key] ||= associated_class.primary_key end |
#right_primary_keys ⇒ Object
The primary key columns to use in the associated table (always array).
527 528 529 |
# File 'lib/sequel/model/associations.rb', line 527 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.
532 533 534 535 |
# File 'lib/sequel/model/associations.rb', line 532 def select return self[:select] if include?(:select) self[:select] ||= Sequel::SQL::ColumnAll.new(associated_class.table_name) end |