【发布时间】:2014-03-07 21:19:20
【问题描述】:
在 Rails 4 中调用 destroy 会在 #update 中引发错误。更新代码在调用时可以正常工作,就像 new / create 一样。
路线:
namespace :admin do
resources :pages
end
match ':controller(/:action(/:id))', :via => [:get, :post]
控制器:
class Admin::PagesController < ApplicationController
layout 'admin'
...
# PUT /pages/1
# PUT /pages/1.xml
def update
logger.info("Starting update")
@page = Page.find(params[:id])
if @page.update_attributes(page_params)
flash[:notice] = "Page updated successfully."
redirect_to(:action => 'show')
else
@page_count = Page.count
render('edit')
end
end
def delete
logger.info("Starting delete")
@page = Page.find(params[:id])
logger.info("Ending delete")
end
def destroy
logger.info("Starting destroy")
#page = Page.find(params[:id]).destroy
@page.destroy
logger.info("After destroy")
flash[:notice] = "Page destroyed successfully."
redirect_to(:action => 'index')
end
# Never trust parameters from the scary internet, only allow the white list through.
def page_params
params.require(:page).permit(:sport, :name, :html_code, :permalink)
end
调用delete html.erb
<% @page_title = "Delete Page" %>
<%= link_to("<< Back to List", {:action => 'index'}, :class => 'back-link') %>
<div class="pages delete">
<h2>Delete Page</h2>
<%= form_for([:admin, @page], :url => {:action => 'destroy', :id => @page.id}) do |f| %>
<p>Are you sure you want to permanently delete this page?</p>
<p class="reference-name"><%= @page.permalink %></p>
<div class="form-buttons">
<%= submit_tag("Delete Page") %>
</div>
<% end %>
</div>
控制台:
Started GET "/admin/pages/delete/4" for 127.0.0.1 at 2014-03-07 12:56:38 -0800
Processing by Admin::PagesController#delete as HTML
Parameters: {"id"=>"4"}
Starting delete
Page Load (0.3ms) SELECT `pages`.* FROM `pages` WHERE `pages`.`id` = 4 LIMIT 1
Ending delete
Rendered admin/pages/delete.html.erb within layouts/admin (1.1ms)
Completed 200 OK in 10ms (Views: 8.2ms | ActiveRecord: 0.3ms)
Started PATCH "/admin/pages/4" for 127.0.0.1 at 2014-03-07 12:56:46 -0800
Processing by Admin::PagesController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"3al7JBY9e1nl+xq7uH2m2S+sWDmhvFLhxuYeUp5ZKv8=", "commit"=>"Delete Page", "id"=>"4"}
Starting update
Page Load (0.3ms) SELECT `pages`.* FROM `pages` WHERE `pages`.`id` = 4 LIMIT 1
Completed 400 Bad Request in 2ms
ActionController::ParameterMissing (param not found: page):
app/controllers/admin/pages_controller.rb:85:in `page_params'
app/controllers/admin/pages_controller.rb:59:in `update'
Rendered /usr/local/var/rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.7ms)
Rendered /usr/local/var/rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.3ms)
Rendered /usr/local/var/rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
Rendered /usr/local/var/rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (15.8ms)
【问题讨论】: