diff options
author | Andrew White <pixeltrix@users.noreply.github.com> | 2017-04-15 12:54:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-15 12:54:47 +0100 |
commit | 348413eaa3cbfec2efd89d01b5449d55ff5f152a (patch) | |
tree | 966a4b2f0cc38ded1b507382e9aabb873b8e6103 /activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb | |
parent | 258f629a267a49532e668ef0756a89ea33a4b15b (diff) | |
parent | 5c8b3391a3d18ff3c3dd822d1531b074afa40675 (diff) | |
download | rails-348413eaa3cbfec2efd89d01b5449d55ff5f152a.tar.gz rails-348413eaa3cbfec2efd89d01b5449d55ff5f152a.tar.bz2 rails-348413eaa3cbfec2efd89d01b5449d55ff5f152a.zip |
Merge pull request #28767 from kamipo/rename_to_association_query_value
Rename `association_query_handler.rb` to `association_query_value.rb`
Diffstat (limited to 'activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb')
-rw-r--r-- | activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb b/activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb new file mode 100644 index 0000000000..2fe0f81cab --- /dev/null +++ b/activerecord/lib/active_record/relation/predicate_builder/association_query_value.rb @@ -0,0 +1,41 @@ +module ActiveRecord + class PredicateBuilder + class AssociationQueryValue # :nodoc: + attr_reader :associated_table, :value + + def initialize(associated_table, value) + @associated_table = associated_table + @value = value + end + + def queries + [associated_table.association_foreign_key.to_s => ids] + end + + private + def ids + case value + when Relation + value.select_values.empty? ? value.select(primary_key) : value + when Array + value.map { |v| convert_to_id(v) } + else + convert_to_id(value) + end + end + + def primary_key + associated_table.association_primary_key + end + + def convert_to_id(value) + case value + when Base + value._read_attribute(primary_key) + else + value + end + end + end + end +end |