ルーティングをネストする (入れ子にする)

routes.rb

resources :boards, only: %i[index new create show] do
    resources :comments, only: %i[create], shallow: true 
    #浅いネストはshallowオプションを使う。
end

ルーティングが以下のようになる。

board_comments POST   /boards/:board_id/comments(.:format)   comments#create

ルーティングをネストすることで、この親子関係を表すことができる。 (今回はboardsが親で、commentsが子供)

ownメソッド

model/user.rb

def own?(object)  #ユーザーのコメントであるかを判定するメソッドをuserモデルに追加。
  id == object.user_id
end

Userモデルに定義することで current_user.own?(@object) と共通化できる。

ストロングパラメータ(以前と違う形)

comments.controller.rb

def comment_params
    params.require(:comment).permit(:body).merge(board_id: params[:board_id])
end

requireメソッド

params内の特定のキーに紐付く値だけを抽出する事ができます。そのため、引数には取り出したい値のキーを指定する必要があります。

permitメソッド

許可された値のみを取得することができます。

そのため、permitメソッドの引数には登録を許可する全てのカラム名を指定しておく必要があります。もし、許可されいないカラムがparams内に存在した場合、そのデータは取得されず無視されます。