質問: Point.find_by(customer_id: current_customer.id) ``` と記述しデータを取得しブラウザに表示したときmemberとpointのテーブルのデータは更新されたデータを取得し 表示することができるのでしょうか?それとも、更新前のデータが表示されてしまうのでしょうか? 更新前のデータが表示されてしまうのはまだいいとしても、新規に登録されたデータを取得しようとしたとき ファイルの内容が実行されていないとデータが存在しないことになってしまいます。 もしくは、いったん「このコードを実行しなさい。」みたいな処理を記述しないと反映されないのでしょうか? Railsフレームワークは賢くて ・ユーザーがアクセスした時点で、全てのファイルが読み込まれ実行されます。 ・データを取得するためにテーブルを呼びだした時点でファイルが読み込まれます。 というのが理想なのですがどうなっているのかどなたか教えていただけないでしょうか? 初歩的な質問ですが流れをいろいろ調べてもわからなかったので宜しくお願いします。
回答: こんにちは。データベースの排他制御とかいう問題にからんでくるのでは? まず1個しかテーブルがない状態でさえ、2人以上のユーザが、同時に同じレコードを更新すると問題が出ます。一人の更新を有効にして、もう一人の更新を無効(表示もして)にしないと不整合になります。複数のテーブルの問題より手前の問題になりますが。 webなら、排他制御があるデータベースが、一般的でしょうが、開発のみに使う、SQLite3は、この機能があるかなあ? と思います。 SQLiteのテーブルを確認するには、db コンソール で接続する---あるいは、SQLite をコマンドから実行する---が、ありますね。わたしは、アプリケーションの実行中には、これらを使ったことがありませんが。レコードが確認できます。 ------db コンソール------- rails dbconsole----------------コンソール起動。プロンプトが表示。 SELECT * FROM テーブル名;-------最後に";"あり .quit-----終了------------------最初にドットあり -----SQLite3 を直接コマンドで操作----- sqlite3 db\development.sqlite3----データベースのファイルのパスを指定して、コマンド入力。(たぶん、Windows8.1--デフォルトのインストール先) .help-----------ヘルプの表示(最初にドットあり) .tables----テーブルを表示(最初にドットあり) .exit--------終了(最初にドットあり) さらに、混乱を招くかもしれませんが、データベースが、確定(コミット--commit)せず、ある時点まで戻す(ロールバック--rollback)すると、データベースに書き込んだレコードまで、コミット前の状態に戻るので、そこも注意です。 「このコードを実行しなさい。」みたいな処理を記述---を書いた部分で、コミットしてないと戻る可能性があるということです。あるいは、戻るようにロールバックを考慮しておく---ということかも?