#author("2025-05-28T09:06:07+00:00","default:admin","admin") #author("2025-05-28T09:08:58+00:00","default:admin","admin") * Rails応用 [#web81f65] 複数のテーブルを関連付けて使用したアプリを作成してみる。 ** アプリの作成開始 [#dcba4ede] 前回とは別の名前でアプリを作成する。 + スタートメニューの「Ruby 3.3.8-1-x64」から「Start Command Prompt with Ruby」を実行。 + 「c:」とだけ入力、そして、「cd \bioinfo2025」と入力して、作業フォルダに移動する。(&color(red){※ 「cd \bioinfo2025」の『cd半角スペース』の後ろの『\』(バックスラッシュ)は、フォントの違いにより、日本語環境では『¥』として見えることが多い。};コピー&ペーストすると、このページ上では『\』なのに、「Start Command Prompt with Ruby」にペーストした時点で『¥』になっているのがわかる。) + 「rails new sample_0528 -G」と入力する。(注:割と時間がかかる) ** アプリの実行 [#z59d7ad4] + (上記の続きなら同じウインドウで続行する。そうでない場合は、スタートメニューの「Ruby 3.3.8-1-x64」から「Start Command Prompt with Ruby」を実行後、「c:」「cd \bioinfo2025」を順に入力するなどして、当該フォルダに移動する。) + 「cd sample_0528」と入力してそのフォルダに移動する。 + 「rails s」と入力してRailsサーバーを立ち上げる。 + ウェブブラウザを開いて「http://127.0.0.1:3000」と入力する。 + Railsのアイコンの画面(https://prog-8.com/docs/rails-env-win 参照)が出たら成功 + 終了時は、「Start Command Prompt with Ruby」内でCtrl+Cを押す(以下に続く場合は、まだ押さないこと) ** より高度な書籍管理アプリを作成してみる [#d8595eb8] + スタートメニューの「Ruby 3.3.8-1-x64」から「Start Command Prompt with Ruby」を実行して、上記とは別に、もう1個、ウインドウを開く。 + 「c:」「cd \bioinfo2025」「cd sample_0528」を順に入力して、フォルダに移動する。 *** 書籍の著者のテーブルを作成 [#nd80d444] 同じ著者が複数の本を執筆することがあるので、書籍とは別に、著者のテーブル(一覧表)を作成したい。 以下を入力する。 rails generate scaffold author name:string birthday:date alive:boolean 入力後エラーが出ていないことを確認。(メッセージは表示される。) ここで、「rails generate scaffold」はscaffoldを作成せよという指示である。 その後に続く「author」は、Authorという名前のモデル(≒データベースに格納するひとまとまりのデータ)を作成する指示となる。 その後に続く「name:string」は、「name」という名前のカラムを「string」という種類の型で作成する指示になる。 同様に、「birthday:date」は、「birthday」カラムを「date」型で、「alive」カラムを「boolean」型で作成する指示となる。 string は文字列、dateは日付、booleanはtrue(真)とfalse(偽)のみを値に持つ型である。 その他のRailsの型一覧は、たとえば https://zenn.dev/goldsaya/articles/02360f3fcb89e2 の中ほどの表が参考になる。 その後、以下を実行。 rails db:migrate http://127.0.0.1:3000/authors にアクセスして、著者の情報を編集できることを確認。 *** 書籍のテーブルを作成 [#q917ed90] 以下を入力 rails generate scaffold book title:string author:references price:integer 入力後エラーが出ていないことを確認。(メッセージは表示される。) その後、以下を実行。 rails db:migrate *** 書籍入力画面の改修 [#g5f1619f] http://127.0.0.1:3000/books にアクセスして、書籍情報を入力しようとすると、著者が存在しない、的なエラーが出てしまう。 上記で「title:string」は、書籍のタイトルを文字列で保持する指示。 「author:references」は、authorを同名のモデルの参照をする特別な指示である。 「price:integer」は、価格を整数で保持する指示。 そして、「references」で指示したデータを入力する際は、そのデータのIDを入力する必要があるため、たとえば「夏目 漱石」などと文字で入力すると、存在しない旨のエラーが出ていたわけである。 これでは不便なので、一部ファイルを編集して、選択肢が表示されるようにする。 エクスプローラで sample_0528 → app → views → books を表示させ、_form_html.erb を右クリックして「NotePad++で編集」を選んで、NotePad++で編集する。 以下の行を探す。 <div> <%= form.label :author_id, style: "display: block" %> <%= form.text_field :author_id %> </div> その行の内容を、以下のように書き換えて、保存する。 その行の内容を、以下のように書き換えて、保存する。(3行目のみ変更点がある) <div> <%= form.label :author_id, style: "display: block" %> <%= form.collection_select :author_id, Author.all, :id, :name %> </div> その後、http://127.0.0.1:3000/books から new books で新規書籍を作成すると、著者を一覧から選べるようになっていることを確認。 *** 書籍一覧画面の改修 [#y9cdc144] http://127.0.0.1:3000/books で書籍の一覧を見ると、著者がidで表示されており、たいへん不便である。 著者を著者名で表示するようにしたい。 エクスプローラで(先ほどと同じフォルダ) sample_0528 → app → views → books を表示させ、_book_html.erb を右クリックして「NotePad++で編集」を選んで、NotePad++で編集する。 以下の行を探す。 <p> <strong>Author:</strong> <%= book.author_id %> </p> 以下のように書き換えて、保存する。 以下のように書き換えて、保存する。(3行目のみ変更点がある) <p> <strong>Author:</strong> <%= Author.find(book.author_id).name %> </p> http://127.0.0.1:3000/books にアクセスして確認。 *** 応用:税込価格を表示する [#f9f60f82] 上記と同じファイル _book_html.erb を、たとえば以下のように編集する。 書き換え前 <p> <strong>Price:</strong> <%= book.price %> </p> 書き換え後(既存の行は変更無し、4行+改行を追記しただけ) <p> <strong>Price:</strong> <%= book.price %> </p> <p> <strong>Price with tax:</strong> <%= (book.price * 1.1).to_i %> </p> 税込み価格の表示が追加されたことを確認。 「(book.price * 1.1).to_i」の .to_i というのは、整数の値を得るというメソッドで、小数点以下を含む数値に対しては、切り捨てて整数の値を求める動作を行う。