Ruby on rails Mongoid属于\u,在子级调用create时不会持久化
我是鲁比·努比 为我的数据库设定种子时,Ruby on rails Mongoid属于\u,在子级调用create时不会持久化,ruby-on-rails,ruby,mongodb,mongoid,Ruby On Rails,Ruby,Mongodb,Mongoid,我是鲁比·努比 为我的数据库设定种子时,Haiku->属于->User的关联未通过Mongoid正确持久化俳句无法在Mongo中正确存储用户id 不起作用 行得通 在挖掘源代码之后,我只能假设process\u attributes没有正确设置关系 为什么它在before部分不起作用,而在after部分起作用?您通常应该使用rake任务将示例数据发布到数据库中。种子用于应用程序运行所需的初始数据 但是,我会这样做: 1.upto(100) do user = User.create! nam
Haiku
->属于->User
的关联未通过Mongoid正确持久化<代码>俳句无法在Mongo中正确存储用户id
不起作用
行得通
在挖掘源代码之后,我只能假设process\u attributes
没有正确设置关系
为什么它在before部分不起作用,而在after部分起作用?您通常应该使用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
通过协会试试这个
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_
所以第一段代码应该是这样的
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_将为您提供bson散列,但user.id为您提供bson对象mongoid内部为提供给它的散列创建一个bson对象批量分配正在尝试设置用户,这应该可以工作 它不起作用了
原因是没有为用户引用调用
attr\u accessible
。此宏需要用于类似的字段和引用。将user.id传入create函数会导致与传入用户实例相同的行为,从而导致关系无法持久化。我确实删除了更干净的after_save回调。感谢关于seeds.rb的提示,尽管我发现了关于如何使用它的相互矛盾的细节(例如:示例数据填充),但我确实不希望我的用户持有haikus的收藏,但您的第一个示例建议我应该持有。明确说明双方都需要关系。当我运行第一个示例时,它确实有效。在接受之前想再尝试几件事吗。
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
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