2013-03-18 61 views
0

我在執行DELETE操作時遇到問題,因爲我的應用程序有任何對象。Rails刪除操作未在運行,並且呈現200正常

向你介紹我的組控制器刪除操作的通用代碼:

def destroy 
    @group = Group.find(params[:id]) 
    respond_to do |format| 
     if @group.delete 
      format.html { redirect_to group_path } 
      format.json { head :no_content } 
     else 
      format.html { redirect_to group_path } 
      format.json { head :no_content } 
     end 
    end 
end 

而對於我的視圖佈局代碼:

<h1>My Groups</h1> 

    <table> 
    <tr> 
     <th>Name</th> 
     <th>Users</th> 
     <th></th> 
     <th></th> 
    </tr> 

    <% @groups.each do |group| %> 
    <tr> 
     <td><%= group.name %></td> 
     <td> 
     <% group.memberships.each do |membership| %> 
      <%= User.find(membership.user_id).name %> 
      <br/> 
     <% end %> 
     </td> 
     <td><%= link_to 'Show', group %></td> 
     <td><%= link_to 'Destroy', group, :confirm => 'Are you sure?', :method => :delete %></td> 
    </tr> 
    <% end %> 
    </table> 

    <br /> 

    <%= link_to 'New Group', new_group_path %> 

我無法甚至刪除組對象儘管rails服務器日誌給了我一個200 OK響應。返回的頁面爲空白屏幕:

Started DELETE "/groups/2" for 127.0.0.1 at 2013-03-19 01:22:01 +0800 
Processing by GroupsController#destroy as HTML 
    Parameters: {"authenticity_token"=>"aH+z0DlL7NeoVlxda8Td76WdnrH7/G8UyWDqbJcTu9w=", "id"=>"2"} 
Completed 200 OK in 0ms (ActiveRecord: 0.0ms) 

未使用ActiveRecord,並且沒有對數據庫進行任何更改。過去沒有這樣的問題,但我只知道我最近不能刪除任何類型的對象。

我一直在試圖找到網絡上發現的類似問題的解決方案,但不幸的是,似乎沒有人有這個問題呢。

更新1:

以下是我的應用程序佈局:

<!DOCTYPE html> 
<html> 
    <head> 
     <%= csrf_meta_tag %> 
     <title>Home</title> 

     <%= javascript_include_tag :application %> 
     <%= stylesheet_link_tag :application, :media => "all" %> 

     <%= javascript_include_tag "/javascripts/main.js" %> 
     <%= stylesheet_link_tag "/css/main.css" %> 
    </head> 
    <body> 

     <%= yield %> 

    </body> 
</html> 

但是,當我使用控制檯刪除對象。它的工作原理:

1.9.3-p194 :003 > Group.find(23).delete 
    Group Load (0.5ms) SELECT "groups".* FROM "groups" WHERE "groups"."id" = $1 LIMIT 1 [["id", 23]] 
    SQL (3.0ms) DELETE FROM "groups" WHERE "groups"."id" = 23 
=> #<Group id: 23, name: "groupie", created_at: "2013-03-18 15:29:42", updated_at: "2013-03-18 15:29:42", user_id: nil> 

回答

1

我剛剛發現問題的解決方案。其實,我寫了一個代碼爲around_filter是搞砸破壞會話的每個控制器:

around_filter :clear_registration_id_on_destroy_session, only: :destroy 


    def clear_registration_id_on_destroy_session 
     is_filter_active = (controller_path == 'devise/sessions' && params[:action] == 'destroy') 

     if is_filter_active && user_signed_in? 
     if current_user.update_attribute(:device_platform, nil) 
      logger.info "Updated device platform attributes to nil" 
     end 

     if current_user.update_attribute(:registration_id, nil) 
      logger.info "Updated registration id attributes to nil" 
     end 

     yield 
     end 
    end 

的問題是,我並沒有比設計的其他任何其他控制器產生什麼:會話#破壞。

因此,對於那些和我一樣健忘的人,請記住在is_filter_active不正確時考慮其他條件。

def clear_registration_id_on_destroy_session 
     is_filter_active = (controller_path == 'devise/sessions' && params[:action] == 'destroy') 

     if is_filter_active && user_signed_in? 
     if current_user.update_attribute(:device_platform, nil) 
      logger.info "Updated device platform attributes to nil" 
     end 

     if current_user.update_attribute(:registration_id, nil) 
      logger.info "Updated registration id attributes to nil" 
     end 

     yield 
     else 
     yield 
     end 
    end 
0

這聽起來像你的刪除鏈接只是作爲一個鏈接到show行動,爲method選項沒有被拾起。

您需要在應用程序佈局中包含相應的JavaScript,因爲刪除鏈接要求JS使用正確的HTTP方法。

如果您使用Rails> = 3.1請確保您有您正在使用的渲染頁面的佈局文件的標題如下:

<%= javascript_include_tag :application %> 

另外,還要確保你有csrf_meta_tag在佈局:

<%= csrf_meta_tag %> 
+0

嗨!感謝您的答案,但我已經包括你提到的,但它仍然無法正常工作。我已經更新了該問題以包含我的應用程序佈局 – user1765921 2013-03-19 01:50:07

相關問題