【问题标题】:redirect_to another controller from link_to with remote=>true in rails在 rails 中使用 remote=>true 从 link_to 重定向到另一个控制器
【发布时间】:2014-05-18 15:13:36
【问题描述】:

在 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 中并且不发生任何操作。我该怎么做?(在数据库中保存assignmenttable 后将页面重定向到new_reporter_path,然后显示一条消息)。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

    1. remove remote: true,因为action后需要重定向用户,所以ajaxify这个请求没有用。
    2. 在 ajax 请求成功时重定向到客户端(请参阅我的回答中的第一个链接)。

    但第二种解决方案很愚蠢,因为您在该请求中使用 ajax 的唯一原因是避免页面重新加载。

    【讨论】:

    • 我怎样才能以 js 格式重定向到不同的控制器??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多