0

当用户调用 users_path 视图时,所有用户都会在显示中正确呈现。

但是,我也在删除后重定向到索引。控制台显示 200 Ok 但未呈现索引。

尝试单步执行一些 rails 代码,看起来在删除之后,rails 会进行隐式渲染。在调用索引视图的第一种情况下,它不会这样做。

视图/用户/index.rb

<% @users.each do |user| %>
<tr class = '<%=cycle('dataeven', 'dataodd')%>' > 
<td class = '<%=cell_class%>'><%= user.username %></td>
<td <class = '<%=cell_class%>'><%= user.email %></td>
<td class = '<%=cell_class%>'><%= user.actual_name %></td>
<td class = '<%=link_cell_class%>'><%= tlink_to 'edit_permissions', permissions_path(user) %></td>
<td class = '<%=link_cell_class%>'><%= tlink_to 'reset_password', edit_password_path(user) %></td>
<td class = '<%=link_cell_class%>'><%= unlock_link(user) %></td>
<td class = '<%=link_cell_class%>'><%= tlink_to("destroy", destroy_user_path(user), {:navigate=>false, :method=>'delete', :remote=>true, :data=>{:confirm=>tmessage( 'delete.are_you_sure', $W, {:model=>user.username}) }})%></td>
</tr>
<%end%>
</table>
<%= twill_paginate %>
<br>

<%= link_to t('headings.new.heading', :model=> t($ARM + 'user', :count=>1)), new_user_path %> | <%= tlink_to "new_invitation", new_user_invitation_path%></li>

users_controller.rb

def index
  @users = User.paginate :page => params[:page], :per_page => 15
  respond_to do |format|
    format.html 
    format.xml  { render :xml => @translation_languages }
  end
end

..... users_controller.rb ...

def destroy    
  @user.destroy
  tflash('delete', :success, {:model=>@@model, :count=>1})
  respond_to do |format|
    format.html { redirect_to(users_url) }
    format.xml  { head :ok }
  end
end

有任何人知道什么可能导致重定向到静默停止

4

3 回答 3

0

谢谢你们的建议。

解决方案非常明显:该应用程序中的所有其他删除都涉及在删除后完全刷新索引页面。不管什么原因,我在这个里面放了一个remote: true 然后没有放任何js来处理html中被删除的行。

所以现在在 users_controller.rb

 def destroy
  @user.destroy
  tflash('delete', :success, {:model=>@@model, :count=>1, :now=> true})
  respond_to do |format|
    format.html { redirect_to(users_url) }
    format.js {}
  end
end

在 users/index.html.erb

<tr class = '<%=cycle('dataeven', 'dataodd')%>' id = '<%= dom_id(user)%>' >     
  <td class = '<%=link_cell_class%>'><%= tlink_to("destroy", destroy_user_path(user), {:navigate=>false, :method=>'delete', :remote=>true, :data=>{:confirm=>tmessage( 'delete.are_you_sure', $W, {:model=>user.username}) }})%></td>

在views/users/destroy.js.erb

$('#user_<%=@user.id %>').remove();

我将以这种方式将我的所有删除更改为使用 ajax。

于 2014-11-17T23:17:43.813 回答
0

两个问题可能会帮助您找到解决方案:

  1. tflash 方法的内容是什么?(如果你把它注释掉,它会起作用吗?)
  2. 为什么您的销毁操作会响应 xml?
于 2014-11-13T05:30:49.337 回答
0

我看到链接是远程的 - 这将是 js 格式。

做这个:

创建一个destroy.js.erb文件,和index.js放在同一目录下。例如,您可以在其中执行 javascript - 删除元素

在视图/用户/destroy.js.erb

$("##{dom_id(user)}").remove()

在视图中,将其添加到用户行:

<tr class = '<%=cycle('dataeven', 'dataodd')%> <%= dom_id(user) %>' > 

编辑

您也可以只删除遥控器:true。应该提到这一点。

于 2014-11-13T07:01:38.373 回答