Rails基本アクションをゼロから理解するためのガイド

# はじめに
最近railsを本格的に使うようになりました。
基本アクションに沿ったページ作成ができるとデータ取得などが非常にやりやすいということを痛感しています。
そこで、各アクションがどのような用途で使われているのか違いを認識し適切なものが使えるように説明していきたいと思います。


# 作成
### `new`アクション
   - **役割**: 新しいリソースを作成するためのフォームを表示するアクションです。`create`アクションとセットで使用されることが多く、ユーザーが入力フォームにアクセスできるようにします。
   - **詳細**:
     - **URLパターン**: `/users/new`, `/posts/new`
     - **動作**: `User.new` で空のインスタンスを作成し、フォームに渡す。ビューにはフォームヘルパーを使って、フォームのフィールドが表示されます。
     - **例**:
       ```ruby
       def new
         @user = User.new
       end
       ```

### `create`アクション
   - **役割**: 新しいリソースをデータベースに作成するためのアクションです。フォームから送信されたデータを受け取り、新しいユーザーや投稿、商品を作成します。
   - **詳細**:
     - **URLパターン**: POSTリクエストで呼び出され、一般的に `/users`, `/posts` などのエンドポイントに対応します。
     - **動作**: `User.new(user_params)` などを使用して新しいインスタンスを生成し、`save` メソッドでデータベースに保存します。
     - **例**:
       ```ruby
       def create
         @user = User.new(user_params)
         if @user.save
           redirect_to @user
         else
           render :new
         end
       end
       ```

# 情報一覧

### `index`アクション
   - **役割**: 複数のリソースを一覧表示するためのアクションです。たとえば、全ユーザーや全投稿、全プロダクトのリストを表示する際に使用します。
   - **詳細**:
     - **URLパターン**: `/users`, `/posts`
     - **動作**: `User.all` などのクエリを使用して、データベースから全レコードを取得し、ビューでリスト表示します。
     - **例**:
       ```ruby
       def index
         @users = User.all
       end
       ```

### `search`アクション（カスタムアクション）
   - **役割**: 特定の条件でリソースを検索するアクションです。標準のCRUDに含まれないカスタムアクションとして、`index`アクションに検索機能を追加する際によく使われます。
   - **詳細**:
     - **URLパターン**: `/users/search`, `/posts/search`
     - **動作**: フォームから送信された検索条件に基づいて、リソースをフィルタリングし、結果を表示します。
     - **例**:
       ```ruby
       def search
         @users = User.where("name LIKE ?", "%#{params[:query]}%")
       end
       ```
# 詳細情報

### `show`アクション
   - **役割**: 単一のリソースの詳細情報を表示するためのアクションです。特定のユーザーや投稿、商品などの詳細ページに使用します。
   - **詳細**:
     - **URLパターン**: `/users/:id`, `/posts/:id`
     - **動作**: `User.find(params[:id])` などを用いて、特定のIDに対応するレコードを取得し、ビューでその詳細を表示します。
     - **例**:
       ```ruby
       def show
         @user = User.find(params[:id])
       end
       ```

# 情報編集
### `edit`アクション
   - **役割**: 既存のリソースを編集するためのフォームを表示するアクションです。`update`アクションとセットで使用され、ユーザーがリソースの情報を更新できるようにします。
   - **詳細**:
     - **URLパターン**: `/users/:id/edit`, `/posts/:id/edit`
     - **動作**: `User.find(params[:id])` で対象のレコードを取得し、フォームに表示するためのインスタンス変数に渡します。
     - **例**:
       ```ruby
       def edit
         @user = User.find(params[:id])
       end
       ```
       
### `update`アクション
   - **役割**: 既存のリソースのデータを更新するためのアクションです。ユーザーのプロフィール情報の更新や投稿内容の修正などに使用します。
   - **詳細**:
     - **URLパターン**: PATCHリクエストで呼び出され、`/users/:id`, `/posts/:id` などのエンドポイントに対応します。
     - **動作**: `User.find(params[:id])` で対象のレコードを取得し、`update` メソッドを用いてフィールドを更新します。
     - **例**:
       ```ruby
       def update
         @user = User.find(params[:id])
         if @user.update(user_params)
           redirect_to @user
         else
           render :edit
         end
       end
       ```

### `destroy`アクション
   - **役割**: リソースを削除するためのアクションです。不要になったユーザーアカウントや投稿を削除する場合に使用します。
   - **詳細**:
     - **URLパターン**: DELETEリクエストで呼び出され、`/users/:id`, `/posts/:id` などのエンドポイントに対応します。
     - **動作**: `User.find(params[:id])` で対象のレコードを取得し、`destroy` メソッドで削除します。
     - **例**:
       ```ruby
       def destroy
         @user = User.find(params[:id])
         @user.destroy
         redirect_to users_path
       end
       ```

# まとめ
この記事では、Railsの基本的なアクションであるindex, show, new, create, edit, update, destroy、そしてカスタムアクションのsearchについて説明しました。これらのアクションを適切に理解し使い分けることで、効率的にアプリケーションを構築できます。
皆さんが基本的なアクションを使いこなすための一助となれば幸いです。
ここまで読んでいただきありがとうございます。