LoginSignup
0
0

More than 3 years have passed since last update.

resource resourcesって何が違うの??

Last updated at Posted at 2020-04-30

Railsルーターの目的

そもそもルーティングは何をしてるんや。という話。
Railsのルーターは受け取ったURLを認識し、適切なコントローラ内アクションやRackアプリケーションに割り当てます。ルーターは、ビューでこれらのパスやURLを直接ハードコードすることを避けるためにパスやURLを生成することもできます。

つまり受け取ったURLを捌いて指示を出す、司令塔ですよってこと。

resources と resource の違い

①URLにidを必要とするかしないのか
②resourceの場合単数なので、一覧みたいな概念はなく、indexが作られない

resources 複数

リソースをいくつも定義しなければならない場合は、以下のように簡単にわかりやすくできる。get,new,create,edit,update,destroy,showがresourcesでまとめられる!(only、exceptで限定することも可能)

resources :photos, :books, :videos

上の記法は以下と完全に同一です。

resources :photos
resources :books
resources :videos

ポイントとしては、リソース名がbooks、photosのような複数形になっていることにも注意
リソースが複数なのでidを持たないと識別できない

resource 単数

ユーザーがページを表示する際にidを一切参照しないリソースが使われることがあります。たとえば、/profileでは常に「現在ログインしているユーザー自身」のプロファイルを表示し、他のユーザーidを参照する必要がないとします。このような場合には、単数形リソース (singular resource) を使ってshowアクションに (/profile/:idではなく) /profileを割り当てることができます。

get 'profile', to: 'users#show'

結局どういうこと?

①URLにidを必要とするかしないのか

下記のようにresourcesが複数だとidが必要
resourceが単数だとidは要らない。

/mobile/posts/:id(.:format)  ←postは何個も存在するためidが必要 
/mobile/profile/edit(.:format) ←profileは一つしか存在しないため、idがいらない

②resourceの場合単数なので、一覧みたいな概念はなく、indexが作られない

routes.eb
resource :users

生成されるルーティング

 new_users GET    /users/new(.:format)  users#new
edit_users GET    /users/edit(.:format) users#edit
     users GET    /users(.:format)      users#show
           PATCH  /users(.:format)      users#update
           PUT    /users(.:format)      users#update
           DELETE /users(.:format)      users#destroy
           POST   /users(.:format)      users#create

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0