首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ActiveRecord中create时覆盖id

在ActiveRecord中create时覆盖id
EN

Stack Overflow用户
提问于 2009-01-10 19:44:58
回答 11查看 57.1K关注 0票数 108

有没有办法在create上覆盖模型的id值?类似于:

代码语言:javascript
复制
Post.create(:id => 10, :title => 'Test')

将是理想的,但显然不会工作。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-10-02 20:55:30

id只是attr_protected,这就是为什么你不能使用批量赋值来设置它的原因。但是,当手动设置时,它只起作用:

代码语言:javascript
复制
o = SomeObject.new
o.id = 8888
o.save!
o.reload.id # => 8888

我不确定最初的动机是什么,但我在将ActiveHash模型转换为ActiveRecord时会这样做。ActiveHash允许您在ActiveRecord中使用相同的belongs_to语义,但是您只需将数据存储在yml文件中,而不是进行迁移和创建表,并且在每次调用时都会产生数据库开销。数据库中的外键引用yml中的内存ids。

ActiveHash对于选择列表和较小的表来说是很棒的,这些表很少更改,并且只由开发人员更改。因此,当从ActiveHash转换到ActiveRecord时,最简单的方法就是保持所有外键引用相同。

票数 124
EN

Stack Overflow用户

发布于 2013-06-08 00:19:24

你也可以使用类似这样的东西:

代码语言:javascript
复制
Post.create({:id => 10, :title => 'Test'}, :without_protection => true)

尽管如docs中所述,这将绕过批量赋值安全性。

票数 31
EN

Stack Overflow用户

发布于 2009-01-10 20:55:40

试一试

代码语言:javascript
复制
a_post = Post.new do |p| 
  p.id = 10
  p.title = 'Test'
  p.save
end

这应该会给你你想要的东西。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/431617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档