↓↓クリックして頂けると励みになります。
【03 | アプリケーションの作成】 << 【ホーム】 >> 【05 | scaffoldの生成】
Railsは、モデル(Model)、ビュー(View)、コントローラ(Controller)というMVC(Model-View-Controller)アーキテクチャを採用しています。
これにより、アプリケーションのロジックを分離し、保守性と可読性を向上させることができます。
Railsのモデルは、アプリケーションのデータ層を担当する部分です。
具体的には、データベースとのやり取りやビジネスロジックの実装など、データに関連する操作を中心に行います。
Railsのコントローラーは、アプリケーションを制御し、HTTPリクエストに応じて適切なレスポンスを生成する部分です。
コントローラーは、ユーザーからのリクエストを受け取り、適切なモデルの操作を行ったり、ビューをレンダリングしたりする役割を持っています。
Railsのビューは、ユーザーに表示されるコンテンツを生成する部分であり、アプリケーションのユーザーインターフェイスを形成します。
ビューは、HTML、ERB(Embedded Ruby)、JavaScriptなどの言語やテンプレートエンジンを使用して、動的なウェブページを生成します。
では実際にコントローラを作成して動作を見てみます。
ターミナルで「rails generate controller Says hello goodby」と入力します。
「rails generate」コマンドで「Saysコントローラ」を作成しています。
コントローラ名は複数形にするという決まりがあります。
コマンド
rails generate controller Says hello goodby
~/Desktop/Rails7_1/SampleCart $ rails generate controller Says hello goodby create app/controllers/says_controller.rb route get 'says/hello' get 'says/goodby' invoke erb create app/views/says create app/views/says/hello.html.erb create app/views/says/goodby.html.erb invoke test_unit create test/controllers/says_controller_test.rb invoke helper create app/helpers/says_helper.rb invoke test_unit
ビューやヘルパーも同時に作成されていることがわかります。
まずはコントローラのソースファイルを見てみます。
ファイルは「SampleCart/app/controllers」フォルダにある「says_controller.rb」ファイルです。
内容確認 【SampleCart/app/controllers/says_controller.rb】
class SaysController < ApplicationController def hello end def goodby end end
Webサーバを起動して、ブラウザのURLにhttp://localhost:3000/says/helloと入力してみます。
ブラウザには以下のように表示されます。
次はビューを書き換えてみます。
「SampleCart/app/views/says」フォルダにある「hello.html.erb」ファイルは以下のようになっています。
内容確認 【SampleCart/app/views/says/hello.html.erb】
<h1>Says#hello</h1> <p>Find me in app/views/says/hello.html.erb</p>
これを以下のように書き換えます。
<h1>こんにちは!</h1> <p>Find me in app/views/says/hello.html.erb</p>
ブラウザのURLhttp://localhost:3000/says/helloを更新すると書き換えが反映しているのがわかります。
このように「.html.erb」ファイルにはHTMLの記述ができますが、<%=
と%>
の間に記述されたコードはRubyのコードと解釈されて実行されます。
「hello.html.erb」ファイルを以下のように書き換えます。
<h1>こんにちは!</h1> <p>現在の時刻は<%= Time.now %>です。</p> <p>Find me in app/views/says/hello.html.erb</p>
ブラウザでhttp://localhost:3000/says/helloを更新します。
実際には「.html.erb」ファイルに直接Rubyコードを埋め込むより、コントローラにインスタンス変数を記述してそれを呼び出す方法を取ります。
インスタンス変数は変数名の頭に「@」をつけます。
「Says」コントローラの「hello」メソッド部分にインスタンス変数「@time」の記述を追加します。
記述追加 【SampleCart/app/controllers/says_controller.rb】3行目
class SaysController < ApplicationController def hello @time = Time.now end def goodby end end
次にビューファイル「hello.html.erb」でインスタンス変数「@time」を呼び出します。
記述変更 【SampleCart/app/views/says/hello.html.erb】
<h1>こんにちは!</h1> <p>現在の時刻は<%= @time %>です。</p> <p>Find me in app/views/says/hello.html.erb</p>
結果は先ほどと同じになります。
この「Says」コントローラにはすでに「goodby」というアクションを定義済みなので、「SampleCart/app/views/says」フォルダにある「goodby.html.erb」ファイルを以下のように書き換えてみます。
記述編集 【SampleCart/app/views/says/goodby.html.erb】
<h1>さようなら!</h1> <p>ご訪問ありがとうございました。</p> <p>Find me in app/views/says/goodby.html.erb</p>
ブラウザでURL「http://localhost:3000/says/goodby」にアクセスして確認します。
続いてこの「hello」と「goodby」の2つ画面を繋ぐリンクを作成してみます。
Railsにはビューテンプレート内で使用可能なヘルパーメソッドが用意されています。
ここでは「link_to()」メソッドを利用します。
記述変更 【SampleCart/app/views/says/hello.html.erb】
<h1>こんにちは!</h1> <p>現在の時刻は<%= @time %>です。</p> <br/> <div><%= link_to "さようなら", says_goodby_path %>と表示する</div> <br/> <p>Find me in app/views/says/hello.html.erb</p>
これで「goodby」ビューへのリンクができます。
http://localhost:3000/says/helloにアクセスして確認してみます。
続いて、カレントディレクトリに存在するファイルリストを返すメソッド「Dir.glob()」を利用してみます。
記述追加 【SampleCart/app/controllers/says_controller.rb】7行目
class SaysController < ApplicationController def hello @time = Time.now end def goodby @files = Dir.glob('*') end end
ビューを編集します。
記述編集 【SampleCart/app/views/says/goodby.html.erb】
<h1>さようなら!</h1> <p>ご訪問ありがとうございました。</p> <br/> <p>カレントディレクトリのファイル名:</p> <ol> <% for file in @files %> <li> <%= file %> </li> <% end %> </ol> <br/> <p>Find me in app/views/says/goodby.html.erb</p>
ブラウザでhttp://localhost:3000/says/goodbyにアクセスして確認します。
【03 | アプリケーションの作成】 << 【ホーム】 >> 【05 | scaffoldの生成】
↓↓クリックして頂けると励みになります。