Ruby on rails 如何在重定向后执行$http.post到rails控制器?
我想要一个按钮上的方法来执行post重定向,然后让rails根据控制器的操作重定向页面 现在,我将以下方法附加到在页面的角度控制器中运行的角度页面上的按钮:Ruby on rails 如何在重定向后执行$http.post到rails控制器?,ruby-on-rails,angularjs,ruby-on-rails-5,Ruby On Rails,Angularjs,Ruby On Rails 5,我想要一个按钮上的方法来执行post重定向,然后让rails根据控制器的操作重定向页面 现在,我将以下方法附加到在页面的角度控制器中运行的角度页面上的按钮: $scope.addClass = function(class_id_string) { let payload = {class_id: class_id_string}; $http({ method: 'POST', url: ADD_CLASS_ACCOUNT_URL,
$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方法,并且class_id参数正在params集合中传递。但是,当调用此方法时,页面上不会发生任何事情。我假设实际发生的是整个页面被返回到$HTTPPOST方法并被忽略,而不是重定向浏览器,但我不确定这里到底发生了什么。但是页面没有按需要重定向
如何实现重定向?Angular使用的是使用$http服务的Ajax调用。这意味着在不重新加载页面的情况下更新网页/向服务器发送数据 当您使用HTTP服务发布数据时,它将调用Rails控制器方法并执行操作并将响应发送回Ajax 在这里,页面重定向无法从Rails控制器工作。如果您想重定向页面,请在$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控制器中,当您从Ajax调用方法时,它将发送JSON响应,如下所示
def save_class_account
class_id = params[:class_id]
render json: {url: display_chart_path, mgs: 'Successfully created'}, status: :created}
end
您对返回的整个页面的假设是正确的。您可以提交一个常规表单,而不是使用ajax($http)或返回数据来告诉javascript重定向到哪里