Railsアプリでネストしたルーティングとオブジェクトの生成方法

Railsアプリで、ネストしたURL(例:https://×××××××/boards/board_id/comments/id)の実装の仕方を紹介します。

ネストしたルーティングの設定

routes.rbファイルに下記のように記述するだけで実装完了です。

resources :boards do
    resources :comments
end

下記のようにonlyを使うことで、余計なルーティングを発行しないようにすることもできます。

resources :boards do
    resources :comments, only: [:create, :edit, :destroy]
end

子供のオブジェクトの生成方法

ネストした子どものコントローラーのcreateアクションでは、下記のように実装します。newではなくbuildを使うことで、親子関係をもったオブジェクトが生成されます。

class CommentsController < ApplicationController

    def create
        board = Board.find_by(id: params[:board_id])
        @comment = board.comments.build(comment_params)
        if @comment.save
            redirect_to board_path(board.id)
        else
            render "boards/show"
        end
    end

    private
    def comment_params
        params.require(:comment).permit(:content)
    end
end

子供のオブジェクトを生成する入力フォーム

親子関係を持ったオブジェクトを作るフォームは下記のように書きます。form_for [@board, @comment]で@boardを親に持つ@commentを作成するフォームにすることができます。

    <%= form_for [@board, @comment] do |f| %>
      <div>
        <%= f.text_area :content %>
      </div>
        <%= f.submit :送信 %>
    <% end %>

レビューやコメント機能を実装する際は、ネストしたルーティングやオブジェクト作成することになりますので、覚えておきたいですね。

Ruby on Railsをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする