1

我是 Rails 和 ajax 的新手,所以我正在尝试构建一个简单的应用程序。我用用户和任务创建了一个简单的应用程序(用户有很多任务)。使用 Devise 处理身份验证。我设置了任务 CRUD 并实现了 best_in_place (就地编辑 gem)并让它工作。我接下来要做的是在一些示例资源(例如创建 100% ajax CRUD )之后添加 ajax 创建和删除。在为 tasks_controller 中的创建和销毁设置所有必要的代码后,I'm getting DELETE http://localhost:3000/tasks/26 500 (Internal Server Error)如 firebug 控制台日志中所示。这些是在 firebug 控制台中打印的错误:

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>

创建表单(没有其他视图的东西):

真) 做 |f| %>

<%= f.label :detail %>
<%= f.text_field :detail %> <%= f.submit %> <% end %>

这是 application.html.erb 的 javascript 标签(包括 jquery.js、jquery.ujs、application.js 和其他不那么相关的 js 文件):

最后,我只是想在 destroy.js.erb 和 create.js.erb 中调用警报:

 alert("Task was deleted");

同样,刷新时 crud 工作正常,感觉好像 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'
4

1 回答 1

0

看起来您在destroy操作中有语法错误。我认为你错过了一个endrespond_to

于 2012-07-27T08:18:22.617 回答