有些东西严重没有在这里添加..我的页面只是刷新,没有任何反应,它永远不会触及我的所有方法上的任何调试器,除了索引。
我的HTML
<%- for image in @images %>
<%= image.attachment_file_name %>
<%-# link_to_delete image, :url => destroy_image_admin_wysiwyg_path(image.id) %>
<%= link_to 'delete', { :url => destroy_image_image_path(image.id) },
#:confirm => 'Are you sure?',
:post => true
%>
<br />
<% end %>
我的控制器
def destroy_image
debugger
@img = Image.find(params[:id])
@img.destroy
respond_to do |format|
format.html { redirect_to admin_image_rotator_path }
end
end
我的路线:
map.resources :images, :member => { :destroy_image => :post }
我发现更好的东西后,我的恶心黑客会被取代
我把动作移到了我自己构建的更简单的控制器上。
将我的路线更改为:
admin.resources :wysiwygs, :member => { :destroy_image => :post }
更改了我的HTML:
<%= link_to 'delete', :controller => "wysiwygs", :action => "destroy_image" %>
但是当我点击链接时..提起...... show
动作? fffffffffuuuuuuu
我只是将我的动作移动到show动作,并在我的HTML中传递一个隐藏的字段进行报复..
<%= link_to 'delete', :controller => "wysiwygs", :action => "destroy_image", :hidden_field => {:value => image.id} %>
def show
# this was previously in destroy_image
@img = Image.find(params[:hidden_field][:value])
@img.destroy
respond_to do |format|
format.html { redirect_to admin_image_rotator_path }
end
end
答案 0 :(得分:3)
这似乎你走错了路。如果before_filter
阻止了您的操作,会找出原因。如果不需要过滤器,请使用skip_before_filter :filter_name
。
请勿使用show
操作或HTTP GET进行删除操作。即使它有效,它也会使事情变得混乱。使用DELETE动词:
map.resources :images, :member => { :destroy_image => :delete }
在链接帮助器中传递它:
<%= link_to "delete", destroy_image_image_path(image), :method => :delete %>
使用ImagesController#destroy_image
执行操作。更好的是,请考虑使用ImagesController#destroy
免费提供的标准RESTful map.resources
。
答案 1 :(得分:1)
首先不确定出了什么问题,但在第二个有效的解决方案中,我认为你应该按照以下方式编写link_to
:
link_to 'delete', :controller => "wysiwygs", :action => "destroy_image", :id => image.id
至少会发送给你正确的行动。
根据您的路线,您必须将其设为method => :post
或不是rake routes
。
检查您的_path
输出,它会显示可能的路线,以及他们获得的名称,然后您可以将其用作方法(在{}添加_url
或link_to 'delete', wysiwygs_destroy_image_path(image)
结束)。那么写起来应该更容易:
{{1}}祝你好运!
答案 2 :(得分:0)
你正在进行POST,但是你的资源说:destroy_image只能通过GET获得。尝试将路线更改为:
map.resources :images, :member => { :destroy_image => :post }
另外,请查看您的link_to
。第二个参数采用URL,而不是具有:url键的哈希。如其他地方所述,根据您的Rails版本,您可能需要:method => :post
而不是:post => true
。在Rails 2.3.8中,您需要这一行:
<%= link_to 'delete', destroy_image_image_path(image), :method => :post %>