1

Ruby on Rails での開発は初めてで、Web アプリケーションの作成に問題があります。


<振る舞い>

1) いくつかのシード データを作成しました。

2) 次に、コンソールで db:reset を試しました。

3) データベース (sqlite) 内のデータは正しく更新されていますが、ビューはまだ変更されていません。コントローラに書いた内容は次のとおりです。

@members = Member.order("番号")

4)次に、Webアプリケーションを介して(今回はコンソールを使用せずに)余分なデータを追加したところ、データはデータベースに追加されていませんが、ビューページのリストにデータが表示されていることがわかりました。


<試したこと>

次のアクションを試しました:

1)データベースにSQLを書き込もうとしましたが、結果は同じでした(データベースに正しく挿入されましたが、ビューページには表示されませんでした)。

2) httpd (私は Passenger を使用しています) を再起動しましたが、変更はありませんでした。

3) Member.reload / Member.reset_column_information を次のように追加しました。

Member.reload
@members = Member.order("number")

このコードを書いた後、変更は初回のみ反映されます。

4) /model/ ディレクトリ下のファイルを上書きすると、変更がビュー ページに反映されることがわかりました。

5) config/environments/development.rb を次のように設定しました。

config.cache_classes = false

そして、何も変わりません。

6) Rails コンソールに次のコードを書きました。

リロード!

何も変わりません。


<質問>

質問は次のとおりです。

1) なぜこれらの奇妙な行動が起こるのですか?

2)レールはデータベースなしでどこにデータを保持および追加しますか?どのように?

3) rake db:reset を使用してデータベースを変更した後、更新を自動的にビューに反映する方法はありますか?

4

2 に答える 2

1

試す:

Member.connection.clear_query_cache

これが発生する理由は、モデルに内部 SQL キャッシュ システムがあり、一部のクエリを複数回呼び出すのを回避するのに役立つためです。

一般に、それは非常にインテリジェントで、 を介してActiveRecord行われた変更を選択できますが、外部プロセス (コンソール) によって行われた変更を選択することはできません。

于 2013-10-09T09:21:42.003 に答える
0

正しい方法でデータを回復していないと思います。@members = Member.order("number") の代わりに次のコードを試してください。

@members = Member.find(:all, :order => "number")

rake db:reset を実行すると更新が表示されるはずです。これは、db をリセットすると rake db:seed タスクが自動的に呼び出されるためです。

それが役に立てば幸い。

于 2013-10-09T09:19:47.073 に答える