Ruby on Rails は、Web アプリケーション開発において人気の高いフレームワークの一つです。
Rails には、MVC(Model-View-Controller)アーキテクチャが採用されており、そのうちのコントローラーについて解説します。
コントローラーとは?
コントローラーは、ユーザーからのリクエストを受け取り、モデルとビューを組み合わせてレスポンスを返します。
つまり、Rails のコントローラーは、アプリケーションのロジックを処理する場所であり、主にユーザーの操作に対するレスポンスを返すために使用されます。
コントローラーの作成
Rails において、コントローラーを作成するためには、rails generate controller コマンドを使用します。
例えば、Posts モデルのコントローラーを作成する場合は、以下のコマンドを実行します。
rails generate controller Posts
このコマンドを実行すると、app/controllers/posts_controller.rb ファイルが作成されます。
このファイルには、以下のようなコードが含まれます。
class PostsController < ApplicationController def index end end
これは、Posts コントローラーの最小限のコードであり、index アクションが定義されています。
このアクションは、app/views/posts/index.html.erb ビューファイルを表示することができます。
アクションとルーティング
コントローラーには、複数のアクションを定義することができます。
アクションは、HTTP リクエストに応じて実行されます。
例えば、以下のようなコントローラーを考えてみましょう。
class UsersController < ApplicationController def index @users = User.all end def show @user = User.find(params[:id]) end def new @user = User.new end def create @user = User.new(user_params) if @user.save redirect_to users_path else render 'new' end end private def user_params params.require(:user).permit(:name, :email) end end
このコントローラーには、index、show、new、create の 4 つのアクションが定義されています。
index アクションは、すべてのユーザーを取得して@users 変数に代入します。show アクションは、指定された ID のユーザーを取得して@user 変数に代入します。
new アクションは、新しいユーザーを作成するための空の@user オブジェクトを作成します。
create アクションは、送信されたフォームデータを使って新しいユーザーを作成し、成功した場合は users_path にリダイレクトします。
一方、失敗した場合は、new テンプレートを再度表示します。
ルーティング
アクションには、URL に対応するルーティングが必要です。
これは、config/routes.rb ファイルで定義されます。
例えば、以下のようなルーティングを定義することができます。
Rails.application.routes.draw do resources :users end
このルーティングは、/users に対するすべての HTTP リクエストを、UsersController のアクションにルーティングします。
ビュー
コントローラーは、ビューを組み合わせてレスポンスを返します。
ビューは、HTML や ERB などのテンプレートエンジンを使用して記述されます。
例えば、app/views/users/index.html.erb ファイルは、UsersController の index アクションから呼び出されるビューです。
<h1>Users</h1> <ul> <% @users.each do |user| %> <li><%= link_to user.name, user_path(user) %></li> <% end %> </ul> <%= link_to 'New User', new_user_path %>
このビューは、すべてのユーザーをリストアップし、各ユーザーの名前をクリックすると show ページに遷移するようになっています。
また、新しいユーザーを作成するためのリンクもあります。
まとめ
コントローラーは、アプリケーションのビジネスロジックを実装する重要な役割を持っています。
また、コントローラーは、ルーティングとビューと密接に関連しており、アプリケーション全体の構造に大きく影響します。