Rails删除方法它不起作用

时间:2014-02-12 20:41:20

标签: ruby-on-rails ruby delete-method

嗯,我在Ruby on Rails中遇到删除方法存在这样的问题,我想,我尝试了所有我读过的内容,但它不起作用,也许你的gusy可以帮助修复这个差距。

当我点击链接时它会重定向到患者/ 1?确认=是+你+确定%3F& method = delete

但是我的Chrome控制台收到了一条消息Uncaught SyntaxError:Unexpected token =:3000 / assets / application.js?body = 1:13属于

  

= require jquery

我的代码如下:

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>

申请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>

路由

  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'

命令行

  

开始GET“/ patients / 1?确认=是+你+确定%3F&amp; method = delete”for   127.0.0.1于2014-02-12 18:14:18 -0300由PatientsController处理#show as HTML参数:{“confirm”=&gt;“你是   确定?“,”方法“=&gt;”删除“,”id“=&gt;”1“} [1m [36mPatient Load(1.0ms)[0m]   [1mSELECT“患者”。*来自“患者”在哪里“患者”。“id”=?限制   1 [0m [[“id”,“1”]]在其中呈现患者/ show.html.erb   布局/应用程序(1.0ms)在13ms内完成200 OK(浏览次数:9.0ms |   ActiveRecord:1.0ms)

感谢您的帮助!

5 个答案:

答案 0 :(得分:2)

可能您遇到验证错误。更新delete方法以在destroy之后使用bang,因此它显示输出。这应该至少可以帮助您调试当前的情况。否则提供更多细节,我可以更新答案。


def destroy
    @patient = Patient.find(params[:id])
    @patient.destroy!
    redirect_to '/patients/new', :notice => "Your patient has been deleted"
end

答案 1 :(得分:2)

<%= link_to "Delete", patient_path(@patient), :confirm => "Are you sure?", :method => :delete %>

更新

application.js应该是

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .

不是

= require jquery
= require jquery_ujs
= require turbolinks
= require_tree .

答案 2 :(得分:0)

in

<%= link_to "Delete", :confirm => "Are you sure?", :method => :delete %>

您错过了path部分

<%= link_to "Delete", destroy_patient_path, :confirm => "Are you sure?", :method => :delete %>

答案 3 :(得分:0)

您需要添加要删除的对象:

<%= link_to "Delete", @patient, :confirm => "Are you sure?", :method => :delete %>

答案 4 :(得分:0)

您需要在视图中...有不同的方式来传递变量

<%= link_to "Delete", destroy_patient_path, :confirm => "Are you sure?", :method => :delete %>

然后在您的routes.rb

#more member routes probably need definition but not showing them here
resources :patients do
    member do
        get  :show
        post :show
        delete :destroy
    end
end

问题是您没有定义路线,而您没有提供呼叫路径