diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-07-31 18:19:36 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-07-31 18:19:36 -0700 |
commit | f25251b5734a2a0934d60dd99c93dfd3d42f2c6c (patch) | |
tree | fd95adaf579b94fdf104097f10f7e07e390e929a /activerecord/lib/active_record/associations/builder/collection_association.rb | |
parent | afa510ed690119cc61e0681d494053de740c79c8 (diff) | |
download | rails-f25251b5734a2a0934d60dd99c93dfd3d42f2c6c.tar.gz rails-f25251b5734a2a0934d60dd99c93dfd3d42f2c6c.tar.bz2 rails-f25251b5734a2a0934d60dd99c93dfd3d42f2c6c.zip |
do is_a? tests on assignment so runtime is faster
Diffstat (limited to 'activerecord/lib/active_record/associations/builder/collection_association.rb')
-rw-r--r-- | activerecord/lib/active_record/associations/builder/collection_association.rb | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/builder/collection_association.rb b/activerecord/lib/active_record/associations/builder/collection_association.rb index 2311754012..708eceaa32 100644 --- a/activerecord/lib/active_record/associations/builder/collection_association.rb +++ b/activerecord/lib/active_record/associations/builder/collection_association.rb @@ -56,7 +56,17 @@ module ActiveRecord::Associations::Builder # TODO : why do i need method_defined? I think its because of the inheritance chain model.class_attribute full_callback_name unless model.method_defined?(full_callback_name) - model.send("#{full_callback_name}=", Array(options[callback_name.to_sym])) + callbacks = Array(options[callback_name.to_sym]).map do |callback| + case callback + when Symbol + ->(method, owner, record) { owner.send(callback, record) } + when Proc + ->(method, owner, record) { callback.call(owner, record) } + else + ->(method,owner,record) { callback.send(method, owner, record) } + end + end + model.send "#{full_callback_name}=", callbacks end # Defines the setter and getter methods for the collection_singular_ids. |