#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 というのは、整数の値を得るというメソッドで、小数点以下を含む数値に対しては、切り捨てて整数の値を求める動作を行う。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS