4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

routingのresourcesとネスト メモ

Last updated at Posted at 2019-04-20

##resourcesメソッド
Railsにデフォルトで設定されている7つの基本アクション

:writing_hand_tone1:書き方:routes.rbに resources:ルーティングを設定したいコントローラ名

アクション 役割
index リソースの一覧を表示
show リソースの内容を表示
new リソースを追加
create リソースを追加し作成
edit リソースを更新するためのフォームを表示
update リソースを更新
destroy リソースを削除
 
:star:リソース:テーブルにとっての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

:point_up: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
# 中略

→どのツイートに対するコメントなのかわからない→ネストを使う

##ルーティングのネスト

ある記述の中に入れ子構造で別の記述をする方法
:writing_hand_tone1:書き方:(コントローラ)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に追加してコントローラに送るため:relaxed:

今回の場合はコメントと結びつくツイートのid情報をコントローラに送るためにネストを使う

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?