aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb
diff options
context:
space:
mode:
authorSean Griffin <sean@thoughtbot.com>2014-06-07 06:39:27 -0600
committerSean Griffin <sean@thoughtbot.com>2014-06-07 06:43:39 -0600
commit1c181c295034a1b3ba8aefb9aede6552d8ff69e4 (patch)
treea9e778fd7bc0e9f4b036a2babd0e4ec1490bd2ab /activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb
parent17fc6f16eb2be481a4d036bea58b3e4ae0052f3a (diff)
downloadrails-1c181c295034a1b3ba8aefb9aede6552d8ff69e4.tar.gz
rails-1c181c295034a1b3ba8aefb9aede6552d8ff69e4.tar.bz2
rails-1c181c295034a1b3ba8aefb9aede6552d8ff69e4.zip
Add array support when time zone aware attributes are enabled
Diffstat (limited to 'activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb')
-rw-r--r--activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb14
1 files changed, 13 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb b/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb
index 18778698e8..7db7d306a4 100644
--- a/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb
+++ b/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb
@@ -32,7 +32,7 @@ module ActiveRecord
if create_time_zone_conversion_attribute?(attr_name, columns_hash[attr_name])
method_body, line = <<-EOV, __LINE__ + 1
def #{attr_name}=(time)
- time_with_zone = time.respond_to?(:in_time_zone) ? time.in_time_zone : nil
+ time_with_zone = convert_value_to_time_zone(time)
previous_time = attribute_changed?("#{attr_name}") ? changed_attributes["#{attr_name}"] : read_attribute(:#{attr_name})
write_attribute(:#{attr_name}, time)
#{attr_name}_will_change! if previous_time != time_with_zone
@@ -52,6 +52,18 @@ module ActiveRecord
(:datetime == column.type)
end
end
+
+ private
+
+ def convert_value_to_time_zone(value)
+ if value.is_a?(Array)
+ value.map { |v| convert_value_to_time_zone(v) }
+ elsif value.respond_to?(:in_time_zone)
+ value.in_time_zone
+ else
+ nil
+ end
+ end
end
end
end