0

Ruby noobie 在这里。

在为我的数据库播种时,Haiku-> belongs_to ->的关联User没有通过 Mongoid 正确持久。Haiku没有正确存储user_id在 Mongo 中。

不工作

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

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

4

3 回答 3

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 对象

于 2012-10-22T08:53:56.227 回答
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
于 2012-10-21T11:55:12.230 回答
0

批量分配正在尝试设置用户,这应该可以工作。

它不工作。

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

于 2012-10-23T06:49:06.400 回答