# File lib/sequel/model/associations.rb, line 1016 def primary_key self[:primary_key] end
class Sequel::Model::Associations::OneToManyAssociationReflection
Constants
- FINALIZE_SETTINGS
Public Instance Methods
Support a correlated subquery limit strategy when using eager_graph.
# File lib/sequel/model/associations.rb, line 966 def apply_eager_graph_limit_strategy(strategy, ds) case strategy when :correlated_subquery apply_correlated_subquery_limit_strategy(ds) else super end end
The keys in the associated model's table related to this association
# File lib/sequel/model/associations.rb, line 976 def associated_object_keys self[:keys] 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, line 982 def can_have_associated_objects?(obj) !self[:primary_keys].any?{|k| obj.get_column_value(k).nil?} end
one_to_many and one_to_one associations can be clones
# File lib/sequel/model/associations.rb, line 987 def cloneable?(ref) ref[:type] == :one_to_many || ref[:type] == :one_to_one 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, line 993 def default_key :"#{underscore(demodulize(self[:model].name))}_id" end
# File lib/sequel/model/associations.rb, line 1000 def finalize_settings FINALIZE_SETTINGS end
Handle silent failure of add/remove methods if raise_on_save_failure is false.
# File lib/sequel/model/associations.rb, line 1005 def handle_silent_modification_failure? self[:raise_on_save_failure] == false end
The hash key to use for the eager loading predicate (left side of IN (1, 2, 3))
# File lib/sequel/model/associations.rb, line 1010 def predicate_key cached_fetch(:predicate_key){qualify_assoc(self[:key])} 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, line 1021 def qualified_primary_key cached_fetch(:qualified_primary_key){qualify_cur(primary_key)} 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, line 1027 def reciprocal_array? false end
Destroying one_to_many associated objects automatically deletes the foreign key.
# File lib/sequel/model/associations.rb, line 1032 def remove_before_destroy? false end
The one_to_many association needs to check that an object to be removed already is associated.
# File lib/sequel/model/associations.rb, line 1037 def remove_should_check_existing? true end
One to many associations set the reciprocal to self when loading associated records.
# File lib/sequel/model/associations.rb, line 1042 def set_reciprocal_to_self? true end
Private Instance Methods
Support correlated subquery strategy when filtering by limited associations.
# File lib/sequel/model/associations.rb, line 1066 def apply_filter_by_associations_limit_strategy(ds) case filter_by_associations_limit_strategy when :correlated_subquery apply_correlated_subquery_limit_strategy(ds) else super end end
# File lib/sequel/model/associations.rb, line 1075 def filter_by_associations_conditions_associated_keys qualify(associated_class.table_name, self[:keys]) end
# File lib/sequel/model/associations.rb, line 1079 def filter_by_associations_conditions_key qualify(self[:model].table_name, self[:primary_key_column]) end
# File lib/sequel/model/associations.rb, line 1083 def filter_by_associations_limit_alias_key Array(filter_by_associations_limit_key) end
# File lib/sequel/model/associations.rb, line 1087 def filter_by_associations_limit_aliases filter_by_associations_limit_alias_key.map(&:column) end
# File lib/sequel/model/associations.rb, line 1091 def filter_by_associations_limit_key qualify(associated_class.table_name, associated_class.primary_key) end
# File lib/sequel/model/associations.rb, line 1095 def predicate_key_methods self[:primary_keys] end
# File lib/sequel/model/associations.rb, line 1099 def reciprocal_association?(assoc_reflect) super && self[:keys] == assoc_reflect[:keys] && primary_key == assoc_reflect.primary_key end
The reciprocal type of a one_to_many association is a many_to_one association.
# File lib/sequel/model/associations.rb, line 1104 def reciprocal_type :many_to_one end
Support automatic use of correlated subqueries if :ruby option is best available option, MySQL is not being used, and either the associated class has a non-composite primary key or the database supports multiple columns in IN.
# File lib/sequel/model/associations.rb, line 1111 def true_eager_graph_limit_strategy r = super ds = associated_dataset 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?) :correlated_subquery else r end end