我在rails中使用rjs模板实现了destroy功能。当从数据库中销毁一条记录时,我收到错误“XML解析错误:找不到元素”。这是我的编码吗?
我使用了以下版本的ruby和rails: Ruby版本:1.8.7 Rails版本:2.3.8
Controller file:
def destroy
begin
@task = Task.find(params[:id])
@task.destroy
respond_to do |format|
#format.html { redirect_to(tasks_url) }
format.js
format.xml { head :ok }
end
rescue Exception => e
puts e
end
end
部分模板文件_task.html.erb:
<tr id="<%= dom_id(task) %>">
<td><%= task.name %></td>
<td><%= task.note %></td>
<td><%= task.priority %></td>
<td><%= link_to 'Show', task %></td>
<td><%= link_to 'Edit', edit_task_path(task) %></td>
<td>
<%= link_to 'Destroy', task, :confirm => 'Are you sure?', :method =>:delete,:remote => :true %>
index.rhtml文件:
<div id='newform'>
<% form_for([@task, Task.new]) do |f| %>
<div>
<%= f.label 'Add a new task: ' %>
<%= f.text_field :name %>
</div>
<div>
<%= f.submit %>
</div>
<% end %>
</div>
<table id="alltasks">
<tr id="tablehead">
<th>Name</th>
<th>Note</th>
<th>Priority</th>
<th></th>
<th></th>
<th></th>
</tr>
<%= render @tasks %>
<!-- expanded: render :partial => "task", :collection => @tasks -->
</table>
<br />
<%= link_to 'New Task', new_task_path %>
destroy.js.rjs文件:
page.alert('Hi')
答案 0 :(得分:0)
问题是xml格式是从你的destroy动作而不是js格式请求的,而且有些东西试图解析控制器中format.xml { head :ok }
行产生的空xml响应。过去你可以使用空的xml响应,但它看起来像你正在使用不引人注目的javascript,并且ujs中的某些地方试图解析它。
一个可能的解决方案是创建一个destroy.xml.builder
视图,生成一个简单的响应,并将您的控制器操作更改为读取format.xml { render :layout => false }
或类似的东西。您也可以通过更改链接请求的数据类型来做一些有趣的事情,但我建议您避免使用它,除非您真的想在destroy.js.rjs中对您的js响应执行某些操作。