我的控制器操作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");
,但它不会在浏览器控制台中被调用...
答案 0 :(得分: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 else。
如果你想在视图文件中做,那么这是以下代码。
<% if (@order.blank?) %>
window.location.href = "<%= escape_javascript(@redirect_path) %>";
<% else %>
// your code
<% end %>