1

これは私が今まで遭遇した中で最も奇妙なバグです

ページ タイトルのインプレース編集を可能にするために、Rails アプリで Best In Place gem を使用しています。インプレース編集が機能し、データベースで新しいタイトルが変更されますが、ページを更新すると古いタイトルに戻ります。データベースに保存されていないため、古いタイトルがどこから取得されているのかさえわかりません。

ページが作成されると、自動的に「無題のページ」というタイトルが付けられます。タイトルを「タイトル」に変更し、postgresql 管理プログラムを使用して DB 内のページの行を見ると、実際に「タイトル」に変わります。しかし、Rails コンソールで Page.find(1).title を実行すると、「無題のページ」が返されます。

これはどうやってできるの?!

4

2 に答える 2

0

アプリは本番モードで実行されていますか?

PG応答とコンソール応答は、2つの異なるデータベースで実行されていない限り、異なることはできません。

  1. データベース構成が、PGを参照するときに手動で接続しているデータベースと同じデータベースを使用していることを確認してください。

  2. Railsコンソールを実行するときに、環境を指定していることを確認してください(デフォルトが実行しているものではない場合):$ rails c product $ rails c development

  3. 上記の両方で問題が解決しない場合は、このアクションのログスニペットを投稿してください。トランザクションがロールバックされている可能性があります。「!」なしで.saveまたは.update_attributeを使用している場合 そうすれば、これはエラーをスローしません。ただし、データベースがデータを更新したと言っているので、これはほとんどありません。

于 2012-11-19T06:41:26.790 に答える
0

修正しました。その理由は、after_initialize を使用して、ActiveRecord オブジェクトが初期化されるたびに呼び出される自動プロパティを設定していたためです。私が本当に欲しかったのは after_create でした。after_create を使用して set_properties という関数を呼び出し、そこで self.title などを設定します。関数の最後で、プロパティを DB に保存するために必要な self.save を呼び出します。

于 2012-11-19T07:31:19.787 に答える