有没有办法在create上覆盖模型的id值?类似于:
Post.create(:id => 10, :title => 'Test')
将是理想的,但显然不会工作。
发布于 2009-10-02 20:55:30
id只是attr_protected,这就是为什么你不能使用批量赋值来设置它的原因。但是,当手动设置时,它只起作用:
o = SomeObject.new
o.id = 8888
o.save!
o.reload.id # => 8888
我不确定最初的动机是什么,但我在将ActiveHash模型转换为ActiveRecord时会这样做。ActiveHash允许您在ActiveRecord中使用相同的belongs_to语义,但是您只需将数据存储在yml文件中,而不是进行迁移和创建表,并且在每次调用时都会产生数据库开销。数据库中的外键引用yml中的内存ids。
ActiveHash对于选择列表和较小的表来说是很棒的,这些表很少更改,并且只由开发人员更改。因此,当从ActiveHash转换到ActiveRecord时,最简单的方法就是保持所有外键引用相同。
发布于 2013-06-08 00:19:24
你也可以使用类似这样的东西:
Post.create({:id => 10, :title => 'Test'}, :without_protection => true)
尽管如docs中所述,这将绕过批量赋值安全性。
发布于 2009-01-10 20:55:40
试一试
a_post = Post.new do |p|
p.id = 10
p.title = 'Test'
p.save
end
这应该会给你你想要的东西。
https://stackoverflow.com/questions/431617
复制相似问题