# File lib/sequel/model/associations.rb 1066 def primary_key 1067 self[:primary_key] 1068 end
class Sequel::Model::Associations::OneToManyAssociationReflection
Constants
- FINALIZE_SETTINGS
Public Instance Methods
Support a correlated subquery limit strategy when using eager_graph.
Sequel::Model::Associations::AssociationReflection#apply_eager_graph_limit_strategy
# File lib/sequel/model/associations.rb 1016 def apply_eager_graph_limit_strategy(strategy, ds) 1017 case strategy 1018 when :correlated_subquery 1019 apply_correlated_subquery_limit_strategy(ds) 1020 else 1021 super 1022 end 1023 end
The keys in the associated model’s table related to this association
# File lib/sequel/model/associations.rb 1026 def associated_object_keys 1027 self[:keys] 1028 end
one_to_many associations can only have associated objects if none of the :keys options have a nil value.
# File lib/sequel/model/associations.rb 1032 def can_have_associated_objects?(obj) 1033 !self[:primary_keys].any?{|k| obj.get_column_value(k).nil?} 1034 end
one_to_many and one_to_one associations can be clones
# File lib/sequel/model/associations.rb 1037 def cloneable?(ref) 1038 ref[:type] == :one_to_many || ref[:type] == :one_to_one 1039 end
Default foreign key name symbol for key in associated table that points to current table’s primary key.
# File lib/sequel/model/associations.rb 1043 def default_key 1044 :"#{underscore(demodulize(self[:model].name))}_id" 1045 end
# File lib/sequel/model/associations.rb 1050 def finalize_settings 1051 FINALIZE_SETTINGS 1052 end
Handle silent failure of add/remove methods if raise_on_save_failure is false.
# File lib/sequel/model/associations.rb 1055 def handle_silent_modification_failure? 1056 self[:raise_on_save_failure] == false 1057 end
The hash key to use for the eager loading predicate (left side of IN (1, 2, 3))
# File lib/sequel/model/associations.rb 1060 def predicate_key 1061 cached_fetch(:predicate_key){qualify_assoc(self[:key])} 1062 end
The column in the current table that the key in the associated table references.
primary_key
qualified by the current table
# File lib/sequel/model/associations.rb 1071 def qualified_primary_key 1072 cached_fetch(:qualified_primary_key){qualify_cur(primary_key)} 1073 end
Whether the reciprocal of this association returns an array of objects instead of a single object, false for a one_to_many association.
# File lib/sequel/model/associations.rb 1077 def reciprocal_array? 1078 false 1079 end
Destroying one_to_many associated objects automatically deletes the foreign key.
# File lib/sequel/model/associations.rb 1082 def remove_before_destroy? 1083 false 1084 end
The one_to_many association needs to check that an object to be removed already is associated.
# File lib/sequel/model/associations.rb 1087 def remove_should_check_existing? 1088 true 1089 end
One to many associations set the reciprocal to self when loading associated records.
# File lib/sequel/model/associations.rb 1092 def set_reciprocal_to_self? 1093 true 1094 end
Private Instance Methods
Support correlated subquery strategy when filtering by limited associations.
Sequel::Model::Associations::AssociationReflection#apply_filter_by_associations_limit_strategy
# File lib/sequel/model/associations.rb 1116 def apply_filter_by_associations_limit_strategy(ds) 1117 case filter_by_associations_limit_strategy 1118 when :correlated_subquery 1119 apply_correlated_subquery_limit_strategy(ds) 1120 else 1121 super 1122 end 1123 end
# File lib/sequel/model/associations.rb 1125 def filter_by_associations_conditions_associated_keys 1126 qualify(associated_class.table_name, self[:keys]) 1127 end
# File lib/sequel/model/associations.rb 1129 def filter_by_associations_conditions_key 1130 qualify(self[:model].table_name, self[:primary_key_column]) 1131 end
# File lib/sequel/model/associations.rb 1133 def filter_by_associations_limit_alias_key 1134 Array(filter_by_associations_limit_key) 1135 end
# File lib/sequel/model/associations.rb 1137 def filter_by_associations_limit_aliases 1138 filter_by_associations_limit_alias_key.map(&:column) 1139 end
# File lib/sequel/model/associations.rb 1141 def filter_by_associations_limit_key 1142 qualify(associated_class.table_name, associated_class.primary_key) 1143 end
# File lib/sequel/model/associations.rb 1145 def predicate_key_methods 1146 self[:primary_keys] 1147 end
Sequel::Model::Associations::AssociationReflection#reciprocal_association?
# File lib/sequel/model/associations.rb 1149 def reciprocal_association?(assoc_reflect) 1150 super && self[:keys] == assoc_reflect[:keys] && primary_key == assoc_reflect.primary_key 1151 end
The reciprocal type of a one_to_many association is a many_to_one association.
# File lib/sequel/model/associations.rb 1154 def reciprocal_type 1155 :many_to_one 1156 end
Support automatic use of correlated subqueries if :ruby option is best available option, the database supports them, and either the associated class has a non-composite primary key or the database supports multiple columns in IN.
Sequel::Model::Associations::AssociationReflection#true_eager_graph_limit_strategy
# File lib/sequel/model/associations.rb 1161 def true_eager_graph_limit_strategy 1162 r = super 1163 ds = associated_dataset 1164 if r == :ruby && ds.supports_limits_in_correlated_subqueries? && (Array(associated_class.primary_key).length == 1 || ds.supports_multiple_column_in?) && (!offset || ds.supports_offsets_in_correlated_subqueries?) 1165 :correlated_subquery 1166 else 1167 r 1168 end 1169 end