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