Well I'm having such a problem with delete method in Ruby on Rails, i think, i tried everything i read but it doesn't work maybe you gusy can help fix the gap.
When I click the link It redirect to patients/1?confirm=Are+you+sure%3F&method=delete
But also a received a message from my chrome console Uncaught SyntaxError: Unexpected token = :3000/assets/application.js?body=1:13 which belong to
= require jquery
My code is following:
patients.controller
def show
@patient = Patient.find(params[:id])
end
def new
@patient = Patient.new
@patients = Patient.find(:all)
end
def create
@patient = Patient.new(params[:patient])
if @patient.save
redirect_to new_patient_path
end
end
def edit
@patient = Patient.find(params[:id])
end
def update
@patient = Patient.find(params[:id])
if @patient.update_attributes(params[:patient])
redirect_to :action => 'show', :id => @patient
else
@patient = patient.find(:all)
render :action => 'edit'
end
end
def destroy
@patient = Patient.find(params[:id])
@patient.destroy
redirect_to '/patients/new', :notice => "Your patient has been deleted"
end
show.html.erb
<h2>Patient Information</h2>
<%= @patient.firstname %><br />
<%= @patient.lastname %><br />
<%= @patient.phone %><br />
<p> <%= link_to "Edit", edit_patient_path %> | <%= link_to "Delete", :confirm => "Are you sure?", :method => :delete %> </p>
application js
= require jquery
= require jquery_ujs
= require turbolinks
= require_tree .
application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Registration Patient System</title>
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield %>
</body>
</html>
routes
resources :patients
match 'patients/:id' => 'patients#show', via: [:get, :post]
resources :users
match '/register', to: 'users#new', via: [:get, :post]
resources :pages
resources :sessions, :only => [:new, :create, :destroy]
match '/login', to: 'sessions#new', via: [:get, :post]
match '/logout', to: 'sessions#destroy', via: [:get, :post]
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".
# You can have the root of your site routed with "root"
root 'sessions#new'
Command Line
Started GET "/patients/1?confirm=Are+you+sure%3F&method=delete" for 127.0.0.1 at 2014-02-12 18:14:18 -0300 Processing by PatientsController#show as HTML Parameters: {"confirm"=>"Are you sure?", "method"=>"delete", "id"=>"1"} [1m[36mPatient Load (1.0ms)[0m [1mSELECT "patients".* FROM "patients" WHERE "patients"."id" = ? LIMIT 1[0m [["id", "1"]] Rendered patients/show.html.erb within layouts/application (1.0ms) Completed 200 OK in 13ms (Views: 9.0ms | ActiveRecord: 1.0ms)
Thanks for your help!
You need to add the object you want to delete:
update
application.js should be
NOT
You need in your view... there are different ways to pass the variable
Then in your routes.rb
The problem is you have not defined the route and you are not providing the path to call
in
<%= link_to "Delete", :confirm => "Are you sure?", :method => :delete %>
you are missing the
path
part<%= link_to "Delete", destroy_patient_path, :confirm => "Are you sure?", :method => :delete %>
Maybe you are having a validation error. Update the delete method to use the bang after the destroy so it shows output. That should at least help you debug your current situation. Otherwise provide more details and I can update answer.