首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当子调用create时,Mongoid belongs_to未持久化

当子调用create时,Mongoid belongs_to未持久化
EN

Stack Overflow用户
提问于 2012-10-21 17:11:19
回答 3查看 648关注 0票数 0

我是鲁比·努比。

在为我的数据库设定种子时,Haiku -> belongs_to -> User的关联没有通过Mongoid正确地保持。Haiku不能正确地在Mongo中存储user_id

不起作用

代码语言:javascript
复制
#seeds.rb

1.upto(100) do
  user = User.create! name: 'foo'
  haiku = Haiku.create! content: 'hello world', user: user
  user.add_point({point_type: :tweet, value: 1, haiku: haiku})
end

能行吗?

代码语言:javascript
复制
1.upto(100) do
  user = User.create! name: 'foo'
  haiku = Haiku.new content: 'hello world'
  haiku.user = user
  haiku.save!
  user.add_point({point_type: :tweet, value: 1, haiku: haiku})
end

在深入研究源代码之后,我只能假设process_attributes没有正确设置关系。

为什么它在前面的部分不起作用,但在后面的部分起作用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-23 14:49:06

批量分配正在尝试设置用户,这应该会起作用。

这不管用。

原因是没有为用户引用调用attr_accessible。此宏需要用于字段和引用。

票数 0
EN

Stack Overflow用户

发布于 2012-10-22 16:53:56

尝试此直通关联

代码语言:javascript
复制
1.upto(100) do
  user = User.create! name: 'foo'
  haiku = user.haiku.create! content: 'hello world'
  user.add_point({point_type: :tweet, value: 1, haiku: haiku})
end

假设您的所有验证和回调都已成功通过,上述方法应该可以正常工作

顺便说一句,要确保代码的第一部分正常工作

确保去做

user.id.to_s

因此,第一部分代码应该如下所示

代码语言:javascript
复制
1.upto(100) do
  user = User.create! name: 'foo'
  haiku = Haiku.create! content: 'hello world', user_id: user.id.to_s
  user.add_point({point_type: :tweet, value: 1, haiku: haiku})
end

user.id.to_s将为您提供bson散列,而user.id将在内部为您提供的散列创建一个BSON对象mongoid。

票数 1
EN

Stack Overflow用户

发布于 2012-10-21 19:55:12

通常应该使用rake任务将示例数据发布到数据库。种子是应用程序运行所需的初始数据。

但是,我会这样做:

代码语言:javascript
复制
1.upto(100) do
  user = User.create! name: 'foo'
  haiku = Haiku.create! content: 'hello world', user_id: user.id
  user.add_point({point_type: :tweet, value: 1, haiku: haiku})
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12996487

复制
相关文章

相似问题

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