2012-07-27 122 views
1

我是rails和ajax的新手,所以我正在嘗試構建一個簡單的應用程序。我用User和Tasks創建了一個簡單的應用程序(用戶有很多任務)。使用Devise處理認證。我設置了任務CRUD並實現了best_in_place(就地編輯gem)並使其工作。接下來我要做的是添加ajax創建和刪除以下一些示例資源,例如creating a 100% ajax CRUD。在螢火蟲控制檯日誌中看到,爲tasks_controller中的創建和銷燬設置所有必需的代碼後,I'm getting DELETE http://localhost:3000/tasks/26 500 (Internal Server Error)。這是印在控制檯中的螢火蟲錯誤:Rails 3 Ajax不能正常工作

DELETE http://localhost:3000/tasks/26 500 (Internal Server Error) 
jQuery.ajaxTransport.send 
jQuery.extend.ajax 
$.rails.rails.ajax 
$.rails.rails.handleRemote 
(anonymous function) 
jQuery.event.dispatch 
jQuery.event.add.elemData.handle.eventHandle 

當破壞鏈接被點擊,並創建相同。刷新之後,任務被刪除並創建,但ajax不能正常工作。我花了一些時間試圖弄清楚什麼是錯,但沒有任何運氣,所以我希望能在這裏得到一些幫助,同時繼續深入研究。下面是我的設置:

首先控制器代碼:

def destroy 
    @task = current_user.tasks.find(params[:id]) 
    @task.destroy 
    flash[:notice] = "Successfully destroyed post." 
     respond_to do |format| 
      format.html { } 
      format.js { } 
     end 
end 

def create 
    @task = current_user.tasks.build(params[:task]) 

    respond_with(@task) do |format| 
     if @task.save 
      flash[:notice] = "Task was created successfully!" 
      respond_to do |format| 
      format.html { redirect_to tasks_url } 
      format.xml { render :xml => @task } 
      format.json { render :json => @task} 
      format.js 
      end 
     else 
      format.html { render :action => :new } 
      format.js 
     end 
    end 

end 

任務列表中的部分顯示任務列表並刪除

<table> 
<% @tasks.each do |task| %> 

<tr> 
<td><%= best_in_place task, :detail %></td> 
<!-- <p><%= best_in_place task, :completed, type: :checkbox %></p> --> 
<td><%= link_to "Destroy", task, :confirm => 'Are you sure?', :method => :delete, :remote => true, :id=>'delete' %></td> 
</tr> 

<% end %> 
</table> 

的創建形式(不另一種觀點的東西):

true)do | f | %>

<%= f.label:詳細%>
<%= f.text_field:詳細%> <%= f.submit%> <%端%>

這是對於application.html.erb JavaScript代碼(包括的jquery.js,jquery.ujs,application.js中和其他不那麼相關的js文件):

最後我只是想打電話報警內部破壞.js.erb a ND與create.js.erb:

alert("Task was deleted"); 

同樣,污物正常工作時刷新,感覺就像destroy.js.erb和create.js.erb不以某種方式聯繫在一起的。我很感激你能否提供一些提示。

下面是從控制檯刪除擊中後錯誤:

ActionView::Template::Error (You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.each): 
    1: 
    2: <table> 
    3: <% @tasks.each do |task| %> 
    4: 
    5: <tr> 
    6: <td><%= best_in_place task, :detail %></td> 
    app/views/tasks/_tasks.html.erb:3:in `_app_views_tasks__tasks_html_erb___1747031968745406293_70257861453000' 
    app/views/tasks/destroy.js.erb:4:in `_app_views_tasks_destroy_js_erb___3673072470672404292_70257861472560' 
+0

找出問題所在。有一個未定義的變量@tasks在將create和destroy移入索引後未添加。而這個未定義的變量導致jquery中斷(儘管該操作起作用)。 – Poyi 2012-07-27 20:54:18

回答

0

看起來好像你在destroy動作語法錯誤。我想你錯過endrespond_to塊。

+0

對不起,它看起來像當我複製毀滅行動的代碼,我錯過了結束。在代碼中,它的respond_to關閉結束。 – Poyi 2012-07-27 16:52:29