Ruby言語:プログラムとデータベースが連携したWebアプリケーション上で、データベースに保存された書籍の題名データが表示されない。
使用環境はrubyバージョン3.0.0, mysqlバージョン5.7, mysql2バージョン0.5.3, bundlerバージョン2.2.3です。
使用機器macOS Big Sur バージョン11.2.2です。使用中のテキストエディタはAtomです。
mysql2バージョン0.5.3がインストールされた時のメッセージが以下の通りです。
$ sudo gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/' -- --with-cppflags=-I/usr/local/opt/openssl@1.1/in
clude --with-ldflags=-L/usr/local/opt/openssl@1.1/lib
Password:
Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl@1.1/include --with-ldflags=-L/usr/local/opt/openssl@1.1/lib'
This could take a while...
Successfully installed mysql2-0.5.3
Parsing documentation for mysql2-0.5.3
Done installing documentation for mysql2 after 0 seconds
1 gem installed
$ bundle install
Using bundler 2.2.3
Using mysql2 0.5.3
Following files may not be writable, so sudo is needed:
/Users/ユーザ名/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/build_info
/mysql2-0.5.3.info
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
今、データベースに保存された書籍の題名データを表示するbooklistというWebアプリケーションを作成させていただいており、肝心なデータベースに保存された書籍の題名データを表示させて頂くことができない上にbookilistというWebアプリケーションが起動しませんでした。
そのbooklistというWebアプリケーションのソースコードが以下の通りです。
booklist/views/booklist.erb
は以下の通りです。
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Booklist</title>
</head>
<body>
<%# フォームデータ送受信確認用コード(本番では削除) %>
<div style="background-color: skyblue;">
<p>動作確認用: <%= params %></p>
</div>
<a href="/"><h1>Booklist</h1></a>
<h2>書籍の登録フォーム</h2>
<form action="/" method="POST">
<input type="text" name="book_title" placeholder="書籍タイトルを入力" required>
<input type="submit" name="submit_add_book" value="登録">
</form>
<h2>登録された書籍一覧</h2>
<ul>
<%# <% @records.each do |record| %> %>←コメントアウトされたため表示されない
<%# <li><%= ERB::Util.html_escape(record['book_title']) %></li> %>←コメントアウトされたため表示されない
<%# <% end %> %>←コメントアウトされたため表示されない
</ul>
</body>
</html>
booklist/app.rb
は以下の通りです。
require 'sinatra'
require 'mysql2'
get '/' do
client = Mysql2::Client.new(host: 'localhost', username: 'root', database: 'booklist', encoding: 'utf8')
@records = client.query("SELECT * FROM books ORDER BY created_at DESC")
erb :booklist
end
post '/' do
client = Mysql2::Client.new(host: 'localhost', username: 'root', database: 'booklist', encoding: 'utf8')
# 書籍タイトルの保存
book_title = params['book_title']
statement = client.prepare('INSERT INTO books (book_title) VALUES(?)')
statement.execute(book_title)
# 書籍タイトルの一覧取得
@records = client.query("SELECT * FROM books ORDER BY created_at DESC")
erb :booklist
end
booklist/create_table_booklist.sql
は以下の通りです。
CREATE TABLE booklist.books (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
book_title VARCHAR(100),
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
以下がbooklist
データベースのbooks
テーブルのデータ(レコード)です。
mysql> SELECT * FROM books;
+----+-----------------------------------------------------------+---------------------+
| id | book_title | created_at |
+----+-----------------------------------------------------------+---------------------+
| 1 | 非エンジニアのためのプログラミング講座 | 2021-03-17 14:16:40 |
| 2 | プログラミングRuby | 2021-03-17 14:17:30 |
| 3 | 入門HTML5 | 2021-03-17 14:18:12 |
+----+-----------------------------------------------------------+---------------------+
3 rows in set (0.01 sec)
あとコメントアウトさせて頂いたソースコードは以下の通りです。
booklist/views/booklist.erb
の19行目から21行目
<%# <% @records.each do |record| %> %>
<%# <li><%= ERB::Util.html_escape(record['book_title']) %></li> %>
<%# <% end %> %>
上記のソースコードをコメントアウトさせて頂いたら、データベースに保存された書籍の題名データが表示しないもののbooklistというWebアプリケーションが起動しました。
逆に上記のコメントアウトされたソースコードから<%# %>の部分を外させて頂いたらbooklistというWebアプリケーションが起動しない上に、データベースに保存された書籍の題名データが表示されませんでした。