rails初学者です。現在、オリジナルアプリを作成中で、削除機能をつけようとした時に、
Couldn't find Schedule without an IDという「IDがありませんよ!」 というエラーが出ました。
まず最初にbinding.pryで
schedules_controller
binding.pry
schedules = Schedule.find(params[:id])
schedules.destroy
paramsの中身を確認したところ、
pramsにはidではなく、formatが代入されていました。
そこで、routes.rbを確認すると
routes.rb
resources :posts do
resource :schedules, only: [:update, :edit, :destroy]
end
とschedulesのresourceが単数系になっていて、このままではIDを付与してくれないので、resourcesの複数形に直し、
index.html.erb
resources :posts do
<% @schedules.order(:date).joins(:memory).each do |s| %>
<tr>
<td><%= s.schedule %></td>
<td><%= s.post.text %></td>
<td><%= link_to s.post.range, post_path(s.post) %></td>
<td><%= s.post.time %></td>
<td>[ <%= link_to '編集する', edit_post_path(s.post,s) %> ]</td>
<td>[ <%= link_to '完了する', post_schedules_path(s.post,s), method: :delete, data:{ confirm: '本当に完了していいですか?' }%> ]</td>
</tr>
<% end %>
の完了するのリンクのpost_schedules_pathをpost_schedule_pathの単数系に直すと、無事解決しました。
反省:
エラーが出てきた時にidが無いと言われたのでparamsの中身を確認せずに、モデルやDBを色々確認していて、エラーを直すのに少し時間がかかってしまった。 次からはparamsをbinding.pryで見ることを忘れずにする。