0Pricing
Ruby Academy · レッスン

コントローラーとアクション

リクエストを処理します。

「コントローラーとアクション」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。

コントローラとは

コントローラはルータからリクエストを受け取り、処理を行って、何を返すかを決定します。モデルとビューの間を調整する役割を担います。

  • コントローラは app/controllers に配置します。
  • ApplicationController を継承します。
  • 各publicメソッドがアクションになります。

コントローラの定義

コントローラは、名前が Controller で終わるクラスです。規約により、ArticlesController は articles リソースのルートを処理します。

class ArticlesController < ApplicationController
  def index
    @articles = Article.all
  end
end

アクションとルートの対応

RESTルート7つのそれぞれが、対応するアクションを呼び出します。ルータは GET /articles を index に、GET /articles/1 を show に送り、以降も同様に処理します。規約に合わせてアクション名を付けると、すべてが自動的に接続されます。

paramsハッシュ

リクエストデータは params に渡されます。これは、ルートのセグメント、クエリ文字列、フォームのフィールドを保持するハッシュに似たオブジェクトです。/articles/5 の場合、params[:id] は "5" になります。

def show
  @article = Article.find(params[:id])
end

ビューへのインスタンス変数

コントローラはインスタンス変数(@ 接頭辞)を通じてビューにデータを渡します。アクションで設定した @variable は、対応するビューテンプレートから参照できます。

def index
  @articles = Article.all
  # @articles is available in index.html.erb
end

indexとshowの実装

読み取りアクションは単純です。index はコレクションを読み込み、show はIDで1件のレコードを読み込みます。その後、それぞれのデフォルトテンプレートをレンダリングします。

class ArticlesController < ApplicationController
  def index
    @articles = Article.all
  end

  def show
    @article = Article.find(params[:id])
  end
end

createの実装

create アクションは、送信されたデータからレコードを作成して保存します。成功した場合はリダイレクトし、失敗した場合はフォームを再度レンダリングして、ユーザーがエラーを修正できるようにします。

def create
  @article = Article.new(article_params)
  if @article.save
    redirect_to @article
  else
    render :new, status: :unprocessable_entity
  end
end

redirect_toとrenderの違い

この2つは、動作が大きく異なるレスポンスです。

  • redirect_to は、別のURLへの新しいリクエストをブラウザに行わせます。
  • render は、現在のリクエストに対してビューを直接返します。

書き込みに成功した後はリダイレクトし、フォームをエラー付きで再表示するときはrenderを使います。

Beforeアクション

before_action は、指定したアクションの前に共通の準備処理を実行し、重複を減らします。show、edit、update、destroy で必要なレコードを読み込む処理が、よくある利用例です。

class ArticlesController < ApplicationController
  before_action :set_article, only: [:show, :edit, :update, :destroy]

  private

  def set_article
    @article = Article.find(params[:id])
  end
end

フィルタと認証

before_action でルールを適用することもできます。before_action :require_login のようなガードは、ユーザーがサインインしていない場合に redirect_to login_path を実行してアクションを中断し、コントローラ全体を一度に保護できます。

before_action :require_login

private

def require_login
  redirect_to login_path unless current_user
end

レコードが見つからない場合の処理

find でレコードが見つからない場合、RecordNotFound が送出され、Railsは本番環境で404レスポンスに変換します。rescue_from を使ってこの動作をカスタマイズし、ユーザーにわかりやすいページを表示することもできます。

rescue_from ActiveRecord::RecordNotFound do
  redirect_to articles_path, alert: "Not found"
end

理解度チェック

コントローラについての理解度を確認します。

復習:コントローラとアクション

コントローラがリクエストを処理する方法を学びました。

  • 規約により、アクションはルートに対応付けられます。
  • params はリクエストデータを保持し、@variables はビューに渡されます。
  • create は保存後にリダイレクトするか、フォームを再度レンダリングします。
  • redirect_to と render は異なる目的で使用します。
  • before_action は共通の準備処理を行い、認証を適用します。

次は、Strong Parametersでマスアサインメントを安全に扱います。

よくある質問

「コントローラーとアクション」レッスンは無料ですか?

はい。「コントローラーとアクション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。

「コントローラーとアクション」で何を学びますか?

リクエストを処理します。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Ruby Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「コントローラーとアクション」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このRuby Academyレッスンでコードを書いて実行できますか?

はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ルートとリソース
  2. コントローラーとアクション
  3. Strong Parameters
  4. ビューとレンダリング
← Ruby Academyに戻る