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が子供)
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内に存在した場合、そのデータは取得されず無視されます。