您好我有以下情况。我可以保存这个哈希数组
activator reload
立刻
products = [{
:name=> 0,
:key => 12345,
:label => "test1",
},{
:name=> 0,
:key => 12145,
:label => "test",
}]
或
products.map {|p| Product.new(p).save }
但是我所有的唯一性验证都是
Product.create(products)
Product.create!(products)
使用rails控制台忽略。我可以多次保存这个哈希。有没有人有一些建议?提前谢谢!
解
就像重新启动我的rails控制台一样简单。之后,我的日志看起来像@Akadisoft的日志。
也使用这种方式:
validates :key, presence: true, uniqueness: true
返回一个带有布尔products.map {|p| Product.new(p).save }
的数组,或者保存或不保存记录,这对于进一步评估很有用。
答案 0 :(得分:1)
我已经尝试过您的确切解决方案,一切都按照意图进行..
我第一次运行命令Product.create(products)
时,我得到以下结果
=> #<ActiveRecord::Relation [#<Product id: 1, key: "12345", name: 0, label: "test1", created_at: "2015-12-09 19:21:01", updated_at: "2015-12-09 19:21:01">, #<Product id: 2, key: "12145", name: 0, label: "test", created_at: "2015-12-09 19:21:01", updated_at: "2015-12-09 19:21:01">]>
我们可以看到它创建了两个产品(id
:1和id
:2)。
现在第二个我在这里运行完全相同的命令是结果:
[#<Product id: nil, key: "12345", name: 0, label: "test1", created_at: nil, updated_at: nil>, #<Product id: nil, key: "12145", name: 0, label: "test", created_at: nil, updated_at: nil>]
irb(main):015:0>
我们可以看到ID为nil
,因为它没有保存产品。我还可以在控制台输出中看到数据库事务已回滚。
答案 1 :(得分:1)
我在控制台上尝试了这个,它只添加了一条记录。
14:42 $ rails c
Loading development environment (Rails 4.2.5)
2.2.2 :001 > products = [{:key =>1},{:key=>1}]
=> [{:key=>1}, {:key=>1}]
2.2.2 :002 > products.map {|p| Product.new(p).save }
(0.1ms) begin transaction
Product Exists (0.1ms) SELECT 1 AS one FROM "products" WHERE "products"."key" = 1 LIMIT 1
SQL (0.8ms) INSERT INTO "products" ("key", "created_at", "updated_at") VALUES (?, ?, ?) [["key", 1], ["created_at", "2015-12-09 19:42:32.488255"], ["updated_at", "2015-12-09 19:42:32.488255"]]
(0.4ms) commit transaction
(0.0ms) begin transaction
Product Exists (0.1ms) SELECT 1 AS one FROM "products" WHERE "products"."key" = 1 LIMIT 1
(0.0ms) rollback transaction
=> [true, false]
2.2.2 :003 > Product.all
Product Load (0.2ms) SELECT "products".* FROM "products"
=> #<ActiveRecord::Relation [#<Product id: 1, key: 1, created_at: "2015-12-09 19:42:32", updated_at: "2015-12-09 19:42:32">]>