如何执行Angular $ http.post到Rails控制器,然后重定向?

时间:2018-11-12 20:42:45

标签: ruby-on-rails angularjs ruby-on-rails-5

我希望按钮上的一种方法能够执行发布重定向,然后根据控制器的操作通过rails重定向页面。

现在,我将以下方法附加到在页面的Angular控制器中运行的有角页面上的按钮上:

 $scope.addClass = function(class_id_string) {
    let payload = {class_id: class_id_string};
    $http({
        method: 'POST',
        url: ADD_CLASS_ACCOUNT_URL,
        data: payload
    });
}

在我的Rails控制器中,我有以下代码:

 def save_class_account
    class_id = params[:class_id]
    return redirect_to display_chart_path unless class_id.nil?
    [...]
 end

我已经确认正在调用controller方法,并且params集合中传入了class_id参数。但是,调用此方法后,页面上什么也没有发生。我认为实际发生的是整个页面都将返回到$ http post方法并被忽略,而不是重定向浏览器,但是我不确定这里到底发生了什么。但是该页面无法根据需要重定向。

如何使重定向发生?

1 个答案:

答案 0 :(得分:1)

Angular正在使用$ http服务使用Ajax调用。这意味着无需重新加载页面即可更新网页/将数据发送到服务器。

使用HTTP Service发布数据时,它将调用Rails Controller方法并执行操作,并将响应发送回Ajax。

此处页面重定向在Rails Controller中不起作用。如果您要重定向页面,请在$ http服务本身中进行以下操作。

$scope.addClass = function(class_id_string) {
 let payload = {class_id: class_id_string};
 $http({
    method: 'POST',
    url: ADD_CLASS_ACCOUNT_URL,
    data: payload
 }).then(function mySuccess(response) {
    window.location = "Paste Redirection URL here"
 }, function myError(response) {
    "Show Error message here"
 });
}

在Rails Controller中,当您从Ajax调用方法时,它将发送JSON响应,如下所示

def save_class_account
 class_id = params[:class_id]
 render json: {url: display_chart_path, mgs: 'Successfully created'}, status: :created}
end