0

ルビー初心者です。

データベースをシードするときに、Haiku-> belongs_to ->の関連付けが MongoidUser経由で正しく保持されません。Mongo にHaiku正しく保存されません。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、関係を正しく設定していないとしか思えません。

before セクションでは機能せず、after セクションでは機能するのはなぜですか?

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_sbson ハッシュを提供しますが、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 に答える