こちらのツイートの疑問点について、僕なりに回答してみます。
例えばですけど、
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.rb
やGemfile
が「れっきとしたRubyプログラム」として見えるようになってくるはずです😃