当子调用创建时,Mongoid belongs_to不会持久化

时间:2012-10-21 09:11:19

标签: ruby-on-rails ruby mongodb mongoid

Ruby noobie在这里。

在播种我的数据库时,Haiku - >的关联belongs_to - > User未通过Mongoid正确保留。 Haiku未在Mongo中正确存储user_id

不起作用

#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

有效吗

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没有正确设置关系。

为什么它不能在之前的部分中起作用,而是在之后的部分中起作用?

3 个答案:

答案 0 :(得分:1)

尝试通过协会

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

所以代码的第一部分看起来应该是这样的

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在内部为提供给它的哈希创建一个bson对象

答案 1 :(得分:0)

您通常应该使用rake任务将样本数据发布到数据库。种子用于初始数据,您的应用需要才能运行。

但是,我会这样做:

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

答案 2 :(得分:0)

质量分配正试图设置用户,这应该有效。

它不起作用。

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