aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/base.rb
diff options
context:
space:
mode:
authorEmilio Tagua <miloops@gmail.com>2009-07-01 20:34:26 -0300
committerEmilio Tagua <miloops@gmail.com>2009-07-01 20:34:26 -0300
commit260c847817bbc3ad990609b7e41f787e1d2940ea (patch)
tree091d71d5eb80d2e49935bf139cb0cbe2e421f1cd /activerecord/lib/active_record/base.rb
parent0f5785c99799b70919e18df3ef1cb43761979f5d (diff)
downloadrails-260c847817bbc3ad990609b7e41f787e1d2940ea.tar.gz
rails-260c847817bbc3ad990609b7e41f787e1d2940ea.tar.bz2
rails-260c847817bbc3ad990609b7e41f787e1d2940ea.zip
Create is now powered by Arel. Removed methods that are no longer used.
Diffstat (limited to 'activerecord/lib/active_record/base.rb')
-rwxr-xr-xactiverecord/lib/active_record/base.rb29
1 files changed, 15 insertions, 14 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb
index e8793c3d2d..1f96e6dcc5 100755
--- a/activerecord/lib/active_record/base.rb
+++ b/activerecord/lib/active_record/base.rb
@@ -2907,18 +2907,13 @@ module ActiveRecord #:nodoc:
self.id = connection.next_sequence_value(self.class.sequence_name)
end
- quoted_attributes = attributes_with_quotes
-
- statement = if quoted_attributes.empty?
- connection.empty_insert_statement(self.class.table_name)
+ new_id = if arel_attributes_values.empty?
+ arel_table.insert connection.empty_insert_statement_value
else
- "INSERT INTO #{self.class.quoted_table_name} " +
- "(#{quoted_column_names.join(', ')}) " +
- "VALUES(#{quoted_attributes.values.join(', ')})"
+ arel_table.insert arel_attributes_values
end
- self.id = connection.insert(statement, "#{self.class.name} Create",
- self.class.primary_key, self.id, self.class.sequence_name)
+ self.id ||= new_id
@new_record = false
id
@@ -2987,6 +2982,10 @@ module ActiveRecord #:nodoc:
default
end
+ def arel_table
+ @arel_table = Arel::Table.new(self.class.table_name)
+ end
+
# Returns a copy of the attributes hash where all the values have been safely quoted for use in
# an SQL statement.
def attributes_with_quotes(include_primary_key = true, include_readonly_attributes = true, attribute_names = @attributes.keys)
@@ -3007,10 +3006,8 @@ module ActiveRecord #:nodoc:
include_readonly_attributes ? quoted : remove_readonly_attributes(quoted)
end
- def arel_table
- @arel_table = Arel::Table.new(self.class.table_name)
- end
-
+ # Returns a copy of the attributes hash where all the values have been safely quoted for use in
+ # an Arel insert/update method.
def arel_attributes_values(include_primary_key = true, include_readonly_attributes = true, attribute_names = @attributes.keys)
attrs = {}
connection = self.class.connection
@@ -3019,7 +3016,11 @@ module ActiveRecord #:nodoc:
value = read_attribute(name)
if include_readonly_attributes || (!include_readonly_attributes && !self.class.readonly_attributes.include?(name))
- attrs[arel_table[name]] = value.is_a?(Hash) ? value.to_yaml : value
+ # We need explicit to_yaml because quote() does not properly convert Time/Date fields to YAML.
+ if value && self.class.serialized_attributes.has_key?(name) && (value.acts_like?(:date) || value.acts_like?(:time))
+ value = value.to_yaml
+ end
+ attrs[arel_table[name]] = (value.is_a?(Hash) || value.is_a?(Array)) ? value.to_yaml : value
end
end
end