mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #28488 from kamipo/preprocess_association_query_handling
Preprocess association query handling in predicate builder
This commit is contained in:
commit
3b474da4e6
1 changed files with 8 additions and 13 deletions
|
@ -87,14 +87,19 @@ module ActiveRecord
|
|||
binds = []
|
||||
|
||||
attributes.each do |column_name, value|
|
||||
binds.concat(value.bound_attributes) if value.is_a?(Relation)
|
||||
case
|
||||
when value.is_a?(Hash) && !table.has_column?(column_name)
|
||||
attrs, bvs = associated_predicate_builder(column_name).create_binds_for_hash(value)
|
||||
result[column_name] = attrs
|
||||
binds += bvs
|
||||
next
|
||||
when value.is_a?(Relation)
|
||||
binds += value.bound_attributes
|
||||
when table.associated_with?(column_name)
|
||||
# Find the foreign key when using queries such as:
|
||||
# Post.where(author: author)
|
||||
#
|
||||
# For polymorphic relationships, find the foreign key and type:
|
||||
# PriceEstimate.where(estimate_of: treasure)
|
||||
result[column_name] = AssociationQueryHandler.value_for(table, column_name, value)
|
||||
when value.is_a?(Range) && !table.type(column_name).respond_to?(:subtype)
|
||||
first = value.begin
|
||||
last = value.end
|
||||
|
@ -114,15 +119,6 @@ module ActiveRecord
|
|||
binds << build_bind_param(column_name, value)
|
||||
end
|
||||
end
|
||||
|
||||
# Find the foreign key when using queries such as:
|
||||
# Post.where(author: author)
|
||||
#
|
||||
# For polymorphic relationships, find the foreign key and type:
|
||||
# PriceEstimate.where(estimate_of: treasure)
|
||||
if table.associated_with?(column_name)
|
||||
result[column_name] = AssociationQueryHandler.value_for(table, column_name, value)
|
||||
end
|
||||
end
|
||||
|
||||
[result, binds]
|
||||
|
@ -155,7 +151,6 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def can_be_bound?(column_name, value)
|
||||
return if table.associated_with?(column_name)
|
||||
case value
|
||||
when Array, Range
|
||||
table.type(column_name).respond_to?(:subtype)
|
||||
|
|
Loading…
Reference in a new issue