2015-08-23

13:56:52

過去の記事のアーカイブ

Rails routes について

resources について

基本的な 7 つのルーティングを作成する。

1
2
3
4
5
6
7
8
9
resources :photos

# GET       /photos                 index        photos_path
# GET       /photos/new             new          new_photo_path
# POST      /photos                 create       photos_path
# GET       /photos/:id             show         photo_path(:id)
# GET       /photos/:id/edit        edit         edit_photo_path(:id)
# PUT       /photos/:id             update       photo_path(:id)
# DELETE    /photos/:id             destroy      photo_path(:id)

resource について

resource は resources に比べて id を伴わず、 index を作らない。 ただし、 controller は複数形にする。

1
2
3
4
5
6
7
8
resource :profile

# GET        /profile/new      new       new_profile_path
# POST       /profile          create    profile_path
# GET        /profile          show      profile_path
# GET        /profile/edit     edit      edit_profile_path
# PUT        /profile          update    profile_path
# DELETE     /profile          destroy   profile_path

プレフィックスについて

namespace を使うと path とcontroller にプレフィックスを付けることが出来る。

1
2
3
4
5
6
7
8
namespace :admin do
  # コントローラは Admin::PhotosController
  resources :photos
end

# GET        /admin/photos      index   admin_photos_path
# GET        /admin/photos/new  new     new_admin_photo_path
# 省略...

次のようにすると controller にのみプレフィックスを付けることが出来る。

1
2
3
4
5
6
7
8
9
10
11
12
scope module: 'admin' do
  # コントローラは Admin::PhotosController
  resources :photos
end

# または
resources :photos, module: "admin"

# path は変わらない
# GET        /photos         index      admin_photos_path
# GET        /photos/new     new        new_admin_photo_path
# 省略...

次のようにすると path のみプレフィックスを付けることが出来る。

1
2
3
4
5
6
7
8
9
10
11
scope '/admin' do
  resources :photos
end

# または
resources :potos, path: '/admin/photos'

# pathが下記のように変わる。 controller は変わらない。
# GET        /admin/photos          index       photos_path
# GET        /admin/photos/new      new         new_photo_path
# 省略...

基本の 7 つ以外のルーティングを追加する場合

member か collection を使う。 member は id あり、 collection は id なし。

1
2
3
4
5
6
7
8
9
10
# GET /photos/:id/preview で preview アクションを呼ぶ

resources :photos do
  member do
    get 'preview'
  end

  # または
  get 'preview', on: :member
end
1
2
3
4
5
6
7
8
9
10
# GET /photos/search で search アクションを呼ぶ

resources :photos do
  collection do
    get 'search'
  end

  # または
  get 'search', on: :collection
end

match と get, post 等について

match は HTTPメソッドを指定せずにルーティングを設定する。

1
match 'hoge' => 'hoges#show'

とすれば http://ホスト名/hoge にアクセスした時に hoges コントローラの show メソッドを呼ぶ。 メソッドを指定するときは

1
matche 'hoge' => 'hoges#show', via: :get

と書くけど、長いので

1
get 'hoge' => 'hoges#show'

でいい。 post , put, delete も同様。

ただし、複数メソッドをつけるときは下記のようにする。

1
matche 'hoge' => 'hoges#show', via: [:get, :post]

パラメータの指定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# id が必須
match 'photos/:id' => 'photos#show'

# id は省略可能
match 'photos/(:id)' => 'photos#show'

# パラメータに正規表現をかけてチェックすることができる。
# 下記では id が数字の場合のみルーティングを設定する。
# 数字以外の場合ルーティングエラーになる。
match 'photos/:id' => 'photos#show', id: /\d/

# ワイルドカード
#
#   'songs/rock/classic/stairway-to-heaven' sets
#    params[:category] = 'rock/classic'
#    params[:title] = 'stairway-to-heaven'
match 'songs/*category/:title' => 'songs#show'
comments powered by Disqus
kbaba1001 profile photo
馬場 一樹 ( @kbaba1001 )
A programmer. Ruby on Rails, SublimeText, zsh, Linux.
Twitter,GitHub