diff options
author | Noemj <olli.rissanen@helsinki.fi> | 2013-04-30 14:27:18 +0300 |
---|---|---|
committer | Noemj <olli.rissanen@helsinki.fi> | 2013-04-30 14:27:18 +0300 |
commit | 9693df61f0143218da6f902021734441312f9d12 (patch) | |
tree | e507c97f5e098a5245ca4b958882e1a69030bca1 /activerecord/lib/active_record/relation.rb | |
parent | a834b57b6e6028eebf6ec29c550f5328a527f487 (diff) | |
download | rails-9693df61f0143218da6f902021734441312f9d12.tar.gz rails-9693df61f0143218da6f902021734441312f9d12.tar.bz2 rails-9693df61f0143218da6f902021734441312f9d12.zip |
Moved update_record logic to relation.rb
Diffstat (limited to 'activerecord/lib/active_record/relation.rb')
-rw-r--r-- | activerecord/lib/active_record/relation.rb | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb index 56462d355b..ad33e398be 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -56,16 +56,7 @@ module ActiveRecord im = arel.create_insert im.into @table - conn = @klass.connection - - substitutes = values.sort_by { |arel_attr,_| arel_attr.name } - binds = substitutes.map do |arel_attr, value| - [@klass.columns_hash[arel_attr.name], value] - end - - substitutes.each_with_index do |tuple, i| - tuple[1] = conn.substitute_at(binds[i][0], i) - end + substitutes, binds = substitute_values values if values.empty? # empty insert im.values = Arel.sql(connection.empty_insert_statement_value) @@ -73,7 +64,7 @@ module ActiveRecord im.insert substitutes end - conn.insert( + @klass.connection.insert( im, 'SQL', primary_key, @@ -82,6 +73,29 @@ module ActiveRecord binds) end + def update_record(values, id, id_was) + substitutes, binds = substitute_values values + um = @klass.unscoped.where(@klass.arel_table[@klass.primary_key].eq(id_was || id)).arel.compile_update(substitutes) + + @klass.connection.update( + um, + 'SQL', + binds) + end + + def substitute_values(values) + substitutes = values.sort_by { |arel_attr,_| arel_attr.name } + binds = substitutes.map do |arel_attr, value| + [@klass.columns_hash[arel_attr.name], value] + end + + substitutes.each_with_index do |tuple, i| + tuple[1] = @klass.connection.substitute_at(binds[i][0], i) + end + + [substitutes, binds] + end + # Initializes new record from relation while maintaining the current # scope. # |