プログラミング学習

Rubyやrailsについて学んだことをアウトプットしています。

【Rails】Resourcesは何をしてくれているのか

今回はrailsでよく使うメソッドのresourcesについて学んでいきます。

というのも、オリジナル開発アプリを作る中でresources以外のアクションを追加しようとした時に方法がわからず詰まってしまいました。
これはresourcesの中で何が起こっているのか認識できていないことが問題だと感じたのでしっかり理解していきたいと思います。

・resourcesメソッドとは

・resourcesはどのようなルーティングを生み出してくれているのか

・onlyとexceptを使いこなして可読性を高めよう

・ 7つ以外のルーティング設定について

resourcesメソッドとは

resourcesメソッドとは、railsで定義されている7つのアクションのルーティングを自動で作成するメソッドです。 【Rails】 | Pikawaka - ピカ1わかりやすいプログラミング用語サイト

7つのアクションとは
index, show, new, create, edit, update, destroy
のことを指します。

これらを1つ1つ設定することなく、自動でルーティングしてくれるのでとても便利なメソッドですね!

resourcesはどのようなルーティングを生み出してくれているのか

7つのアクションを自動でルーティングしてくれる便利なメソッドですが中でどのような設定を行ってくれているのか理解しないと今回の僕のように苦労してしまいます。

一度確認してみましょう。

   get 'tweets'     => 'tweets#index'
    get 'tweets/:id' => 'tweets#show'
    get 'tweets/new' => 'tweets#new'
    post 'tweets' => 'tweets#create'
    get 'tweets/:id/edit' => 'tweets#edit'
    patch 'tweets/:id'  => 'tweets#update'
    delete 'tweets/:id' => 'tweets#destroy'

show, edit, update, destroyアクションにはそれぞれidが指定されていますね。

これらのアクションは特定のオブジェクトに対してアクションを行うのでidが必要になります。

onlyとexceptを使いこなして可読性を高めよう

onlyとexceptを使用すると特定のアクションだけを指定することができます。

指定することによってコードを読んだときにアクションを明示できるので可読性が高まります。
また、rails routesコマンドを使用するときなどに表示される項目を減らすことができます。

コードの書き方は以下になります。

resources :tweets, only: [:index, :snow]
# 指定されたアクションのみをルーティングします。

resources :tweets, except: [:new, :create, :edit, :update, :destroy]
# 指定されたアクション以外をルーティングします。
7つ以外のルーティング設定について

resourcesでは先ほど紹介した7つのアクションしかルーティングを設定することができません。
よって、他にもルーティングを追加したいときはmenberかcollectionを使用する必要があります。

menberは以下のようにコードを書きます。 menberの特徴は「idで指定した個々のリソースに対してアクションを設定することができる」ことです。

  resources :tweets do
    member do
      get 'review'
    end
  end

collectionは以下のようにコードを書きます。 collectionの特徴は「リソース全体に対するアクションを定義することができること」です。

resources :tweets do
    collection do
      get 'search'
    end
  end

それぞれ用途によって使い分けていきましょう。

参考記事:

【Rails】 | Pikawaka - ピカ1わかりやすいプログラミング用語サイト