1

モデル内に after_save アクションを実行する関数があります

その関数内には、次のコードがあります

progression = Progression.find_by_id(newprogression)
if progression.participation_id.nil?
  progression.participation_id = participation.id
  progression.save
else

私が見ているのは、進行状況が更新されていないということです。以下であっても

  • 保存する前にprogress.participation_idを確認すると、更新されています
  • デバッガーで手動で progress.save を実行すると、true が返されます。

何かご意見は?

4

5 に答える 5

1

わかりました、私は同じ問題を抱えていて、なんとか対処しました。問題は協会名にありました。User という名前のモデルと、各ユーザーの新しい更新の数を持つ Update という名前の子モデルがありました。したがって、user.rbには次の行がありました:

has_one :update

この行を削除した後、すべてが再び機能し始めました。これは Rails の予約名のようで、モデルの作成時には使用しないでください。おそらく、ここで同じ問題を抱えているかもしれません。Rails がこの問題を指摘していないのは残念です。

于 2013-10-13T20:21:16.003 に答える
0

キャッシュの問題である可能性があります。AR Relations-Sec 3.1のレールガイドから、trueを渡してキャッシュをリロードすることをお勧めします。進行を通じてリンクを確立した後、参加によってチェックしている場合、これに遭遇する可能性があります。

プログレッションがParticipationに属していると仮定すると、

試してみてください:progression.participation=参加してからprogression.save

また、次のことを試してください:participation.progressions << progress andparticipation.save?

于 2013-02-23T18:11:05.337 に答える
0

saveafter_save同じトランザクションで実行します。多分それは問題です。after_commitコールバックを使用してみてください

于 2013-08-13T15:45:07.400 に答える
0

試す

progression = Progression.find_by_id(newprogression)
if progression.participation_id.nil?
  progression.update_attributes(
     :participation_id => participation.id
  )
else
于 2013-02-23T17:16:28.457 に答える