Deleting an Idea
The final action to perform is deleting an idea.
In this page, we will delete the existing idea.
adding delete option in index page
Let’s update an action link in the index page so that one can perform deleting operation.
Add following changes to app/views/ideas/index.html.erb
file to add deleting feature:
<table>
<tr>
<th>Title</th>
<th>Description</th>
<th colspan="3">Actions</th>
</tr>
<% @ideas.each do |idea| %>
<tr>
<td><%= idea.title %></td>
<td><%= idea.description %></td>
<td><%= link_to 'Show', idea_path(idea) %></td>
<td><%= link_to 'Edit', edit_idea_path(idea) %></td>
<td><%= link_to 'Delete', idea_path(idea) %></td>
</tr>
<% end %>
</table>
On reloading the ideas index page, https://localhost:3000/ideas
, you will see following:
Now, click on the Delete
link to perform deletion of any of the idea. See what happens.
The reason is simple. Right now the URL for delete link is GET /ideas/:id
which is exactly same as for showing idea (check by viewing its page source). We actually need DELETE /ideas/:id
.
delete route
Let’s update our routes.rb
file add delete route.
Rails.application.routes.draw do
root 'ideas#index'
resources :ideas, only: [:index, :show, :new, :create, :edit, :update, :destroy]
end
NOTE: Notice :destroy
above which add delete route for idea resource, DELETE /ideas/:id
.
Confirm with rails routes
:
rails routes | grep 'idea'
...
DELETE /ideas/:id(.:format) ideas#destroy
destroy controller action
Add following controller action in IdeasController
:
def destroy
@idea = Idea.find(params[:id])
@idea.destroy
redirect_to ideas_path
end
View change
The last thing remaining is to update the Delete
link in order to perform delete operation instead of showing.
To do that just add method
option with :delete
value. See Rails URLHelper link_to.
Update the link_to
with Delete
label as follows:
<%= link_to 'Delete', idea_path(idea), method: :delete %>
Now, click on the Delete
link and see what happens.
Let’s update our delete link to ask confirmation from user before performing delete. Now, update the link_to
as follows:
<%= link_to 'Delete', idea_path(idea), method: :delete,
data: { confirm: 'Are you sure, you want to delete this idea?' } %>
Now, click on the Delete
link and see the updated behavior. You will notice a popup with confirmation message.
On click OK
, the idea will be delete from the application.
Help me to improve Dhanu Sir.