使用Rails提交远程表单后,如何将用户重定向到另一个页面?

时间:2016-05-27 22:02:45

标签: ruby-on-rails ajax ruby-on-rails-4 redirect remote-forms

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

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

但是如果用户成功提交表单,我想重新加载调用模式对话框的页面,并注意“已成功保存”。我无法弄清楚我需要在“format.js”中添加什么内容“要做到这一点。这是我到目前为止控制器中的内容......

  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 个答案:

答案 0 :(得分:8)

您可以执行以下操作:

#app/controllers/redirect.rb
...

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

...

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

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

答案 1 :(得分:0)

如果你还是要重定向,你也可以避免远程/ AJAX调用,只需从创建动作重定向。

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

def create
  @my_object = MyObject.new(my_object_params)
  ...
  redirect_to some_path
end

答案 2 :(得分:0)

如果您想在成功if (model.asMap().containsKey("bindignResultForJobOfferForm")) { model.addAttribute("errors", model.asMap().get("bindignResultForJobOfferForm")); } 之后重定向,只需使用create/updated方法。否则只需使用JS LINK中的JS选项。

.html

答案 3 :(得分:0)

这将从您的控制器中为您提供帮助

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