2012-07-27 129 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