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
没有正确设置关系。
为什么它不能在之前的部分中起作用,而是在之后的部分中起作用?
答案 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
。这个宏需要用于字段和引用。