【问题标题】:cancel default controller action's redirect取消默认控制器操作的重定向
【发布时间】:2014-12-06 20:05:47
【问题描述】:

有这个链接:

= 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如何禁用此默认重定向? 我知道如何指定自定义重定向,但这不是我需要的。视图由脚本管理,数据库在操作中被修改,因此不需要更多操作,我不希望页面刷新。 render 也不起作用,因为相关内容是动态加载的,所以基本上什么都不做是我需要的。

我发现了这种解决方法,例如包括respond_to :js 并创建空的close.js.erb 文件,或者将:onclick 上方移动到该文件,但我想习惯性地这样做。事实上,该链接现在可以在操作中使用 respond_to :js 所需的工作(此处不包括),但控制台会抛出 Missing template 错误,这不是很好。我查看了Rails RedirectingJS with RailsRendering guide 等等,但无济于事。

【问题讨论】:

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


    【解决方案1】:

    试试这个:

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

    【讨论】:

    【解决方案2】:

    其实在reading this之后,我一定要伸张正义,贴出官方推荐的处理方式。动作应为:

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

    感谢@auL5agoi 引导我回答这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 2016-11-30
      • 1970-01-01
      相关资源
      最近更新 更多