##resourcesメソッド
Railsにデフォルトで設定されている7つの基本アクション
書き方:routes.rbに resources:ルーティングを設定したいコントローラ名
アクション | 役割 |
---|---|
index | リソースの一覧を表示 |
show | リソースの内容を表示 |
new | リソースを追加 |
create | リソースを追加し作成 |
edit | リソースを更新するためのフォームを表示 |
update | リソースを更新 |
destroy | リソースを削除 |
リソース:テーブルにとっての1ツイートのこと |
例)bookというリソースに対して基本の7つのアクションをリクエストする
coning/routes.rb
Rails.application.routes.draw do
resources :books
end
#ターミナルでrake routesを実行
Prefix Verb URI Pattern Controller#Action
books GET /books(.:format) books#index
POST /books(.:format) books#create
new_book GET /books/new(.:format) books#new
edit_book GET /books/:id/edit(.:format) books#edit
book GET /books/:id(.:format) books#show
PATCH /books/:id(.:format) books#update
PUT /books/:id(.:format) books#update
onlyオプションやexceptオプションが使える
例)
config/routes.rb
Rails.application.routes.draw do
devise_for :users
root 'tweets#index'
resources :tweets
resources :comments, only: [:create]
resources :users, only: [:show]
end
#発行されるパス
Prefix Verb URI Pattern Controller#Action
# 中略
comments POST /comments(.:format) comments#create
# 中略
→どのツイートに対するコメントなのかわからない→ネストを使う
##ルーティングのネスト
ある記述の中に入れ子構造で別の記述をする方法
書き方:(コントローラ)do(別のコントローラ)end
例)tweets_controllerのルーティングの中にcomments_controllerのcreateアクションのルーティングを記述
config/routes.rb
Rails.application.routes.draw do
root 'tweets#index'
resources :tweets do ←
resources :comments, only: [:create]
end←
resources :users, only: [:show]
end
#ターミナルでrake routes
Prefix Verb URI Pattern
tweet_comments POST /tweets/:tweet_id/comments(.:format)
↑キーが設定される
tweets/show.html.erb
<%= form_tag("/tweets/#{@tweet.id}/comments", method: :post) do %>
↑ここ
comments_controller.rb
def create
Comment.create(text: params[:text], tweet_id: params[:tweet_id], user_id: current_user.id)
end
##ルーティングをネストする理由
####アソシエーション先のレコードのidをparamsに追加してコントローラに送るため
今回の場合はコメントと結びつくツイートのid情報をコントローラに送るためにネストを使う