提交 ac1df91e 编写于 作者: P Pratik Naik

Implement Relation#create and Relation#create!

上级 65200d29
......@@ -16,7 +16,15 @@ def initialize(klass, relation)
end
def new(*args, &block)
@klass.send(:with_scope, :create => create_scope) { @klass.new(*args, &block) }
with_create_scope { @klass.new(*args, &block) }
end
def create(*args, &block)
with_create_scope { @klass.create(*args, &block) }
end
def create!(*args, &block)
with_create_scope { @klass.create!(*args, &block) }
end
def merge(r)
......@@ -185,6 +193,10 @@ def method_missing(method, *args, &block)
end
end
def with_create_scope
@klass.send(:with_scope, :create => create_scope) { 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)
......
......@@ -10,6 +10,7 @@
require 'models/entrant'
require 'models/developer'
require 'models/company'
require 'models/bird'
class RelationTest < ActiveRecord::TestCase
fixtures :authors, :topics, :entrants, :developers, :companies, :developers_projects, :accounts, :categories, :categorizations, :posts, :comments,
......@@ -493,4 +494,27 @@ def test_scoped_build
assert_equal 'You told a lie', post.title
end
def test_create
birds = Bird.scoped
sparrow = birds.create
assert_kind_of Bird, sparrow
assert sparrow.new_record?
hen = birds.where(:name => 'hen').create
assert ! hen.new_record?
assert_equal 'hen', hen.name
end
def test_create_bang
birds = Bird.scoped
assert_raises(ActiveRecord::RecordInvalid) { birds.create! }
hen = birds.where(:name => 'hen').create!
assert_kind_of Bird, hen
assert ! hen.new_record?
assert_equal 'hen', hen.name
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册