取消默认控制器操作的重定向

时间:2014-12-06 20:05:48

标签: javascript ruby-on-rails redirect respond-to

有这个链接:

= link_to "Close", close_ticket_path(:id => ticket.id), :onclick => $(this).closest('tr').remove()", :remote => true

路由到tickets_controller#close:

  def close
    @ticket  = Ticket.find(params[:id]).update_attribute(:status, "closed")
  end

默认情况下,此操作会重定向到views/tickets/close如何禁用此默认重定向?我知道如何指定自定义重定向,但这不是我需要的。视图由脚本管理,并且在操作中修改了db,因此不再需要操作,我不希望页面刷新。 render也不会有效,因为有问题的内容是动态加载的,所以基本上什么都不是我需要的。

我发现这种解决方法是包含respond_to :js并创建空close.js.erb文件,或将:onclick移到此文件之上,但我想以惯用方式执行此操作。事实上,链接现在可以根据需要使用动作中的respond_to :js(此处未包含),但是控制台会抛出Missing模板错误,这不是很好。我查看了Rails RedirectingJS with RailsRendering guide等等,但无济于事。

2 个答案:

答案 0 :(得分:1)

试试这个:

def close
  @ticket  = Ticket.find(params[:id]).update_attribute(:status, "closed")
  render nothing: true, :status => 200
end

答案 1 :(得分:0)

实际上,在reading this之后,我必须正义并发布正式推荐的处理此案的方法。该行动应为:

def close
  @ticket  = Ticket.find(params[:id]).update_attribute(:status, "closed")
  head :ok
end

谢谢你,@ auL5agoi,带我回答这个问题。