2010-12-06 55 views
0

有些東西在這裏真的沒有加起來。我的頁面只是刷新,沒有任何反應,它從來沒有觸及我的除了索引之外的所有方法中的任何調試器。如何正確刪除這個?

我的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" %> 

但是,當我點擊了link..it長大..的show行動? fffffffffuuuuuuu

我報復,只是提出我的行動來展現動作,並在我的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

也許一個`before_filter`正在阻止操作被觸及?此外,這是一個不尋常的方法 - 使用GET刪除通常被認爲是不明智的。 – zetetic 2010-12-06 20:01:59

+1

`:post => true`看起來不正確。你嘗試`:method =>:post`嗎? – zetetic 2010-12-06 20:04:42

回答

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要執行的操作。更好的是,請考慮使用免費的map.resources爲您提供的標準RESTful ImagesController#destroy

0

你正在做一個職位,但你的資源說: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 %> 
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) 

祝你好運!