1

我的控制器操作perform_review正在响应 json。只要有要获取的订单,就会perform_review.js.erb使用新订单重新渲染视图部分,但是当我们无法查看订单时,perform_review.js.erb应该重定向到其他页面。

控制器如下所示:

## orders_controller.rb

class OrdersController < ApplicationController

  def perform_review

    ...

    @order = get_order

    respond_to do |format|
      format.html {
      redirect_to orders_path(current_user)
      }
      format.js {
        if @order == nil
          @redirect_path = orders_path
          return
        end
      }
    end
  end
end

这是 js.erb 文件:

## perform_review.js.erb

if ("<%=@redirect_path %>" != "") {
  location.href = "<%=@redirect_path %>";
}
else
  var order_options_partial = $("#order_options_partial");
  order_options_partial.children().remove();
  order_options_partial.append('<%= j render("order_options") %>');

else部分工作正常,但 if 部分没有。奇怪的是控制器中的一切都很好,@redirect_path并被分配了“/orders”。但是,perform_review.js.erb在此之后似乎没有被触发。为了确定这一点,我试图输入一行console.log("Starting perform_review.js.erb");,但它没有在浏览器控制台中被调用......

4

1 回答 1

2

您也可以在控制器中执行此操作

class OrdersController < ApplicationController

  def perform_review

    ...

    @order = get_order

    respond_to do |format|
      format.html {
      redirect_to orders_path(current_user)
      }
      format.js {render :js => "window.location.href = '"+orders_path(current_user)+"'"} if @order.blank?
    end
  end
end

这样,您的perform_review.js.erb. 而如果你想在视图文件中做,那么这里是下面的代码。

<% if (@order.blank?) %>
  window.location.href = "<%= escape_javascript(@redirect_path) %>";
<% else %>
  // your code
<% end %>
于 2013-09-10T14:05:13.393 回答