Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?

こちらのツイートの疑問点について、僕なりに回答してみます。

例えばですけど、

resource :basket, only: [:show, :update, :destroy]

このとき、resourceには:がなくて、onlyには:がある。 これって、Rubyなんでしょうか?

文法面だけにフォーカスすれば、上のコードは純粋なRubyのコードです。以下のような説明が付きます。

  • resourceはメソッド
  • :basketは第1引数で型はシンボル
  • only: [:show, :update, :destroy]は第2引数で型はハッシュ。
  • 第2引数のハッシュはキーが:onlyで型はシンボル、値は[:show, :update, :destroy]で型は配列(各要素はシンボル)

なので、以下のように書いたりすることも可能です。

# メソッドなのであえて( )で囲んでみる
resource(:basket, only: [:show, :update, :destroy])

# あえて => でハッシュのキーを指定してみる
resource :basket, :only => [:show, :update, :destroy]

# シンボルの配列を%i()で書いてみる
resource :basket, only: %i(show update destroy)

# あえてハッシュを{ }で囲んでみる
resource(:basket, { only: [:show, :update, :destroy] })

routes.rbの内部に書かれているのは純粋なRubyのコードですが、プログラムというより「設定ファイル」のように見えます。 こういうプログラムをDSLと呼びます。(チェリー本12章のコラムを参照)

ここまでの説明をあわせると、

このとき、resourceには:がなくて、onlyには:がある。

ということになるのは次のような理由があるからです。

  • resourceはメソッドなので:が付かない
  • onlyはシンボルなので:が付く。(さらにいうとハッシュのキーなので、:が右側に付く)

Rubyの文法をきっちり理解していると、routes.rbGemfileが「れっきとしたRubyプログラム」として見えるようになってくるはずです😃

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment