LoginSignup
0
0

More than 3 years have passed since last update.

【Rails】resourceとresourcesは別物ですね

Last updated at Posted at 2020-07-01

題の通りです。
私はタイポに気づかず1時間悩みました。

環境

Rails v5.2.4.3
Ruby v2.5.1

やりたかったこと

index.html.erb内にlistsコントローラーのeditにつながるリンクを作りたかったです。

list_controller.rb
def index
    @lists = List.order("id")
end
index.html.erb
<% @lists.each do |list| %>
    <%= link_to "編集", [:edit, list] %>
<% end %>
routes.rb
resource :lists

ここまで授業を振り返りながらやっていたつもりだったから間違えていると思っていなかった。
だがしかしエラーが出る。

undefined method `edit_list_path' for #<#<Class:hoge>:hogehoge>

メソッドがないと。

ターミナルの方でルーティングを出してみました。

$ rails routes
(省略)
edit_lists GET    /lists/edit(.:format)
(省略)

はて。
ここで私は/lists/:id/editと表示される気満々だった。
そりゃメソッドがないわけだ。
調べてたらルーティングでresourceとしていると:idとならないことがわかり。

routes.rb
resources :lists

resourceresourcesにしたら問題なく動作しました。

ルーティングも

$ rails routes
(省略)
edit_lists GET    /lists/:id/edit(.:format)
(省略)

となったので一安心です。

resourcesとresource

ここからはついでに調べたので自分用のメモ書きです。

resources は今回のように、ユーザから見てたくさんある対象に対して使うと。
例えば今回ではlistは複数あるものであり、idという番号が振られていて、そのidのlistを編集するためのルーティングが欲しかった。
なので resources

resource は、ユーザから見て一つしかないもの。マイページなどが相当する。
一つしかないからidで絞る必要がないというわけですね。

勉強になりました。

参考にさせていただいたサイト

Railsのルーティング | Railsガイド
Railsのresourcesとresourceついて | Qiita

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