Как выполнить Angular $ http.post для контроллера rails с последующим перенаправлением? - PullRequest
0 голосов
/ 12 ноября 2018

Я хотел бы, чтобы на кнопке был метод для перенаправления поста, а затем перенаправления страницы рельсами в соответствии с действиями контроллера.

Теперь у меня есть следующий метод, прикрепленный к кнопке на угловойстраница, запущенная в угловом контроллере страницы:

 $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

Я подтвердил, что вызывается метод контроллера и чтоПараметр class_id проходит через коллекцию параметров.Но все же, ничего не происходит на странице, когда этот метод вызывается.Я предполагаю, что на самом деле происходит то, что вся страница возвращается к методу $ http post и игнорируется вместо перенаправления браузера, но я не уверен, что здесь происходит на самом деле.Но страница не перенаправляет по желанию.

Как я могу получить перенаправление?

1 Ответ

0 голосов
/ 13 ноября 2018

Angular использует Ajax-вызовы с использованием сервиса $ http. Это означает обновление веб-страницы / отправка данных на сервер без перезагрузки страницы.

Когда вы публикуете данные, используя HTTP-сервис, он вызывает методы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...