aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation.rb
diff options
context:
space:
mode:
authorPratik Naik <pratiknaik@gmail.com>2010-01-04 03:50:16 +0530
committerPratik Naik <pratiknaik@gmail.com>2010-01-04 03:50:16 +0530
commita68165833a7ba50a1e3d731afe8934d19e3ced99 (patch)
treeafb89f08afb126f1464298f7d3da719490912399 /activerecord/lib/active_record/relation.rb
parenta115b5d79a850bb56cd3c9db9a05d6da35e3d7be (diff)
downloadrails-a68165833a7ba50a1e3d731afe8934d19e3ced99.tar.gz
rails-a68165833a7ba50a1e3d731afe8934d19e3ced99.tar.bz2
rails-a68165833a7ba50a1e3d731afe8934d19e3ced99.zip
Add Relation#create_with to explictily specify create scope
Diffstat (limited to 'activerecord/lib/active_record/relation.rb')
-rw-r--r--activerecord/lib/active_record/relation.rb16
1 files changed, 9 insertions, 7 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index 6b9925d4e7..487b54f27d 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -6,7 +6,7 @@ module ActiveRecord
attr_reader :relation, :klass
attr_writer :readonly, :table
- attr_accessor :preload_associations, :eager_load_associations, :includes_associations
+ attr_accessor :preload_associations, :eager_load_associations, :includes_associations, :create_with_attributes
def initialize(klass, relation)
@klass, @relation = klass, relation
@@ -124,7 +124,7 @@ module ActiveRecord
end
def reset
- @first = @last = @create_scope = @to_sql = @order_clause = nil
+ @first = @last = @to_sql = @order_clause = @scope_for_create = nil
@records = []
self
end
@@ -163,13 +163,15 @@ module ActiveRecord
end
def with_create_scope
- @klass.send(:with_scope, :create => create_scope) { yield }
+ @klass.send(:with_scope, :create => scope_for_create) { yield }
end
- def create_scope
- @create_scope ||= wheres.inject({}) do |hash, where|
- hash[where.operand1.name] = where.operand2.value if where.is_a?(Arel::Predicates::Equality)
- hash
+ def scope_for_create
+ @scope_for_create ||= begin
+ @create_with_attributes || wheres.inject({}) do |hash, where|
+ hash[where.operand1.name] = where.operand2.value if where.is_a?(Arel::Predicates::Equality)
+ hash
+ end
end
end