在rails项目中,我有2个控制器,我使用link_to
和remote => 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
,然后显示一条消息。
答案 0 :(得分:0)
您需要阅读this。当您使用link_to remote:true时,您将页面请求替换为ajax请求。因此,您的重定向会保留在此ajax请求中,而不会出现在您的浏览器中。所以你有两个可能的解决方案:
但是第二种解决方案是愚蠢的,因为只有你在该请求中使用ajax的原因是为了避免页面重新加载。