aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2019-01-11 18:01:55 +0900
committerRyuta Kamizono <kamipo@gmail.com>2019-01-11 18:01:55 +0900
commit6c6c32463e71af4e3395a691052a89c4c1571acd (patch)
tree01bb835caa08ba66a17c76ec40813a91fc8907bc /activerecord
parenteb5fef554fde84d36b45191182ed98bd344dc967 (diff)
downloadrails-6c6c32463e71af4e3395a691052a89c4c1571acd.tar.gz
rails-6c6c32463e71af4e3395a691052a89c4c1571acd.tar.bz2
rails-6c6c32463e71af4e3395a691052a89c4c1571acd.zip
Refactor `bind_attribute` to expand an association to actual attribute
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/relation.rb5
-rw-r--r--activerecord/lib/active_record/validations/uniqueness.rb5
2 files changed, 5 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index ba221a333b..a863227276 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -44,6 +44,11 @@ module ActiveRecord
end
def bind_attribute(name, value) # :nodoc:
+ if reflection = klass._reflect_on_association(name)
+ name = reflection.foreign_key
+ value = value.read_attribute(reflection.klass.primary_key) unless value.nil?
+ end
+
attr = arel_attribute(name)
bind = predicate_builder.build_bind_attribute(attr.name, value)
yield attr, bind
diff --git a/activerecord/lib/active_record/validations/uniqueness.rb b/activerecord/lib/active_record/validations/uniqueness.rb
index 19ba2b8cd9..111b6c9a64 100644
--- a/activerecord/lib/active_record/validations/uniqueness.rb
+++ b/activerecord/lib/active_record/validations/uniqueness.rb
@@ -56,11 +56,6 @@ module ActiveRecord
end
def build_relation(klass, attribute, value)
- if reflection = klass._reflect_on_association(attribute)
- attribute = reflection.foreign_key
- value = value.attributes[reflection.klass.primary_key] unless value.nil?
- end
-
relation = klass.unscoped
comparison = relation.bind_attribute(attribute, value) do |attr, bind|
return relation.none! unless bind.boundable?