Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Mongoid属于\u,在子级调用create时不会持久化_Ruby On Rails_Ruby_Mongodb_Mongoid - Fatal编程技术网

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