4

我正在使用 Rails 4.2.3。我想在模态对话框中提交表单,所以我已经像这样设置了我的表单

<%= form_for @my_object, :remote => true do |f| %>

但是如果用户成功提交表单,我想重新加载调用模式对话框的页面,并显示“已成功保存”的通知。我不知道我需要在我的“format.js”中放入什么来实现这一点。到目前为止,这就是我在控制器中所拥有的……</p>

  def create
    @my_object = MyObject.new(my_object_params)
    @current_user = User.find(session["user_id"])
    @my_object.user = @current_user
    respond_to do |format|
      if @my_object.save
        format.html { redirect_to controller: "users", action: "index", notice: 'Saved successfully.' }
        format.js   { render action: ‘../users/index’, notice: ‘Saved Successfully’, location: @my_object }
      else
        format.html { render action: "index" }
        format.js   { render json: @my_object.errors, status: :unprocessable_entity }
      end
    end
  end

现在,当我尝试执行上述操作时,成功提交会导致 500 错误,抱怨缺少部分。很确定我有什么是错的。

4

5 回答 5

12

您可以执行以下操作:

#app/controllers/redirect.rb
...

format.js { render js: "window.location='#{url.to_s}'" }

...

如果您喜欢将事物分开,只需放入format.js您的控制器并在您的视图中执行 javascript 重定向 (redirect.js.erb)

在这两种情况下,只需在重定向之前将 flash[:notice] 设置为您需要的任何内容。

于 2016-06-02T20:18:29.947 回答
3

重定向到事件路径,格式:'js'

为此,您需要在文件结构中包含 events/index.js.erb。

于 2017-08-09T07:35:24.747 回答
0

这将从您的控制器帮助您

render :js => "window.location = '/jobs/index'"

于 2019-08-06T17:34:32.317 回答
0

如果您想在成功后重定向它create/updated并且只需使用.html方法。否则,只需使用此LINK中的 JS 选项。

  def create
    @my_object = MyObject.new(my_object_params.merge(user: User.find(session["user_id"])))
    respond_to do |format|
      if @my_object.save
        format.html { redirect_to controller: "users", action: "index", notice: 'Saved successfully.' }
      else
      ....
      end
    end
  end
于 2016-05-28T15:42:23.453 回答
0

如果您仍然要重定向,您最好避免远程/AJAX 调用,而只需从创建操作重定向。

<%= form_for @my_object do |f| %>

def create
  @my_object = MyObject.new(my_object_params)
  ...
  redirect_to some_path
end
于 2016-05-28T05:14:35.843 回答