Railsのroutesでnamespaceとscopeの設定

  • 110
    Like
  • 0
    Comment

Rails芸人のすろっくさんだよ。

Railsのroutes.rbでnamespaceとscopeを設定できるんですが、こんな違いがあります。

namespace

TestConrollerのReadアクションにアクセスしたいわけなんだけど、
routes.rbに

namespace :v3 do
    get "/test/read",:to=>"test#read"
end

とか書くと

GET  /v3/test/read(.:format)    v3/test#read

こうなります。
v3フォルダの下のTestControllerにアクセスしにいきます。

scope

scopeだけを設定するといつものappフォルダの下にあるコントローラにアクセスしにいきます。

scope :v3 do
    get "/test/read",:to=>"test#read"
end

とか書くと

GET  /v3/test/read(.:format)    test#read

あえてフォルダの一個下ぽいURLを作りたいときなんかに使えそうですね。/adminとか/auth、またはAPIなんかに。

Rails5で検証

Rails5になったので検証してみました。

 12   namespace :artists do
 13     get 'similars/index'
 14     get 'similars/show'
 15     get 'tags/index'
 16     get 'tags/show'
 17   end

僕が現在書いているソースコードの抜粋ですが、これだと

/artists/simmilar/index

とかでアクセスできました。まだ使える手法なのでぜひ!