Allow overriding validations - pass :perform_validations => false to save from create_or_update while skipping model validations.
This commit is contained in:
parent
272c102f95
commit
0b1c79c6f7
@ -10,14 +10,14 @@ class ActiveRecord::Base
|
|||||||
# Returns the record.
|
# Returns the record.
|
||||||
def self.create_or_update(options = {})
|
def self.create_or_update(options = {})
|
||||||
id = options.delete(primary_key.to_sym)
|
id = options.delete(primary_key.to_sym)
|
||||||
validate = options.delete(:perform_validations) || true
|
validate = options.delete(:perform_validations){|k| true}
|
||||||
record = send("find_by_#{primary_key}", id) || new
|
record = send("find_by_#{primary_key}", id) || new
|
||||||
record.id = id
|
record.id = id
|
||||||
record.attributes = options
|
record.attributes = options
|
||||||
if validate
|
if validate
|
||||||
record.save!
|
record.save!
|
||||||
else
|
else
|
||||||
record.save!(false)
|
record.save(false)
|
||||||
end
|
end
|
||||||
record
|
record
|
||||||
end
|
end
|
||||||
|
@ -49,7 +49,7 @@ class DbPopulateTest < Test::Unit::TestCase
|
|||||||
|
|
||||||
def test_creates_new_record_without_validation
|
def test_creates_new_record_without_validation
|
||||||
Customer.delete_all
|
Customer.delete_all
|
||||||
Customer.create_or_update(:cust_id => 1, :name => "Me")
|
Customer.create_or_update(:cust_id => 1, :name => "Me", :perform_validations => false)
|
||||||
assert_equal Customer.count, 1
|
assert_equal Customer.count, 1
|
||||||
c = Customer.find(:first)
|
c = Customer.find(:first)
|
||||||
assert_equal c.name, "Me"
|
assert_equal c.name, "Me"
|
||||||
|
Loading…
Reference in New Issue
Block a user