我希望按钮上的一种方法能够执行发布重定向,然后根据控制器的操作通过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方法并被忽略,而不是重定向浏览器,但是我不确定这里到底发生了什么。但是该页面无法根据需要重定向。
如何使重定向发生?
答案 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