題の通りです。
私はタイポに気づかず1時間悩みました。
環境
Rails v5.2.4.3
Ruby v2.5.1
やりたかったこと
index.html.erb内にlistsコントローラーのeditにつながるリンクを作りたかったです。
def index
@lists = List.order("id")
end
<% @lists.each do |list| %>
<%= link_to "編集", [:edit, list] %>
<% end %>
resource :lists
ここまで授業を振り返りながらやっていたつもりだったから間違えていると思っていなかった。
だがしかしエラーが出る。
undefined method `edit_list_path' for #<#<Class:hoge>:hogehoge>
メソッドがないと。
ターミナルの方でルーティングを出してみました。
$ rails routes
(省略)
edit_lists GET /lists/edit(.:format)
(省略)
はて。
ここで私は/lists/:id/edit
と表示される気満々だった。
そりゃメソッドがないわけだ。
調べてたらルーティングでresource
としていると:id
とならないことがわかり。
resources :lists
resource
をresources
にしたら問題なく動作しました。
ルーティングも
$ rails routes
(省略)
edit_lists GET /lists/:id/edit(.:format)
(省略)
となったので一安心です。
resourcesとresource
ここからはついでに調べたので自分用のメモ書きです。
resources
は今回のように、ユーザから見てたくさんある対象に対して使うと。
例えば今回ではlistは複数あるものであり、idという番号が振られていて、そのidのlistを編集するためのルーティングが欲しかった。
なので resources
。
resource
は、ユーザから見て一つしかないもの。マイページなどが相当する。
一つしかないからidで絞る必要がないというわけですね。
勉強になりました。