redirect_to来自link_to的另一个控制器,其中remote =>在rails中为true

时间:2014-05-18 15:13:36

标签: ruby-on-rails

在rails项目中,我有2个控制器,我使用link_toremote => true来创建新的assignmenttable。我有以下代码:

assignmettables_controller.rb

class AssignmenttablesController < ApplicationController
  before_action :set_assignmenttable, only: [:show, :edit, :update, :destroy]

  def new
    @assignmenttable = Assignmenttable.new
  end

  def create
    @assignmenttable = Assignmenttable.new
    @assignmenttable.current_user_id = params[:current_user_id]
    @assignmenttable.task_id = params[:task_id]

    respond_to do |format|
      if @assignmenttable.save
        format.html { redirect_to new_reporter_path, notice: 'Assignmenttable was successfully created.' }
        format.json { render action: 'show', status: :created, location: @assignmenttable }
      else
        format.html { render action: 'new' }
        format.json { render json: @assignmenttable.errors, status: :unprocessable_entity }
      end
    end
  end
end

views/assignmettables/_form.html.erb

<%= link_to "submit", assignmenttables_path(:current_user_id => user.id, :task_id => params[:task_id]), :remote => true,  :method => "post" %>

现在,当我点击submit时,这两个参数会传递给控制器​​中的create操作,新的assignmenttable会在数据库中创建,我希望在保存assignmenttable时,页面是redirect_to另一个控制器(new_reporter_path),但该页面保留在assignmettable/new中,并且不会执行任何操作。我该怎么做?(在将new_reporter_path保存到数据库中后,将页面重定向到assignmenttable,然后显示一条消息。

1 个答案:

答案 0 :(得分:0)

您需要阅读this。当您使用link_to remote:true时,您将页面请求替换为ajax请求。因此,您的重定向会保留在此ajax请求中,而不会出现在您的浏览器中。所以你有两个可能的解决方案:

  1. 删除remote:true,因为您需要在操作后重定向用户,因此没有用来ajaxify此请求。
  2. 在ajax请求成功时重定向客户端(请参阅我的回答中的第一个链接)。
  3. 但是第二种解决方案是愚蠢的,因为只有你在该请求中使用ajax的原因是为了避免页面重新加载。