aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/arel/engines/sql/engine.rb12
1 files changed, 6 insertions, 6 deletions
diff --git a/lib/arel/engines/sql/engine.rb b/lib/arel/engines/sql/engine.rb
index 6087a26816..8accf3874c 100644
--- a/lib/arel/engines/sql/engine.rb
+++ b/lib/arel/engines/sql/engine.rb
@@ -26,13 +26,13 @@ module Arel
module CRUD
def create(relation)
- primary_key_value = nil
- if primary_key = relation.primary_key
- if primary_key_attribute_and_value = relation.record.detect{|k, v| k.name.to_s == primary_key.to_s}
- primary_key_value = primary_key_attribute_and_value[1].value
+ attribute = [*relation.record].map do |attr, value|
+ if attr.respond_to?(:name) && !relation.primary_key.blank? && attr.name == relation.primary_key
+ value
end
- end
- connection.insert(relation.to_sql(false), nil, primary_key, primary_key_value)
+ end.compact.first
+ primary_key_value = attribute ? attribute.value : nil
+ connection.insert(relation.to_sql(false), nil, relation.primary_key, primary_key_value)
end
def read(relation)