Rails-контроллеры выполнены не полностью - PullRequest
0 голосов
/ 07 января 2019

Один и тот же Ajax-код выполняется из двух разных функций JavaScript. В обеих функциях ajax вызывает функцию connected в контроллере для обновления значения в таблице Room. Но когда ajax вызывается из функции javascript connected, вся функция выполняется, но не тогда, когда она вызывается из disconnected.

Функции JavaScript в show.html.erb

var room_id = <%= @room.id %>
console.log("room id: ", room_id)

  session.on("connectionCreated", function(event) {
      console.log("connectionCreated");
       $.ajax({
                type: "PUT",
                data: JSON.stringify({ room: {connected: true}, _method:'put' }),
                url: "/rooms/" + room_id + "/connected",
                contentType: 'application/json'
              }).done(function( msg ){
                alert( "Data Saved: " + msg );
       });
   });

  // Disconnect
  session.on('sessionDisconnected', function(event) {
    console.log("session Disconnected")
    $.ajax({
            type: "PUT",
            data: JSON.stringify({ room: {connected: false}, _method:'put' }),
            url: "/rooms/" + room_id + "/connected",
            contentType: 'application/json'
            }).done(function( msg ){
                alert( "Data Saved: " + msg );
       });
    window.location.replace('<%= rooms_path %>');
  });
}

Server.logs:

 From: 

/ Users / us186007 / Рабочий стол / WebApps / goldenyears / app / controllers / rooms_controller.rb @ line 38 RoomsController # подключено:

36: def connected
37:     binding.pry
=> 38:     @room = Room.find params[:room_id]
39:     binding.pry
40:     @room.update_attributes(:connected => params[:room][:connected])
41: end

 [1] pry(#<RoomsController>)> continue
Room Load (0.4ms)  SELECT  "rooms".* FROM "rooms" WHERE "rooms"."id" = $1 
LIMIT $2  [["id", 6], ["LIMIT", 1]]

From: /Users/us186007/Desktop/WebApps/goldenyears/app/controllers/rooms_controller.rb @ line 40 RoomsController#connected:

36: def connected
37:     binding.pry
38:     @room = Room.find params[:room_id]
39:     binding.pry
=> 40:     @room.update_attributes(:connected => params[:room][:connected])
41: end

[1] pry (#)> продолжить (0,2 мс) НАЧАТЬ (0,2 мс) COMMIT Не найден шаблон для RoomsController # подключен, рендеринг head: no_content Завершено 204 Нет содержимого в 20108ms (ActiveRecord: 0,8ms)

  Started PUT "/rooms/6/connected" for 127.0.0.1 at 2019-01-06 13:33:31 -0800
 Processing by RoomsController#connected as */*
Parameters: {"room"=>{"connected"=>false}, "room_id"=>"6"}
Started GET "/rooms" for 127.0.0.1 at 2019-01-06 13:33:31 -0800

From: /Users/us186007/Desktop/WebApps/goldenyears/app/controllers/rooms_controller.rb @ line 38 RoomsController#connected:

36: def connected
37:     binding.pry
=> 38:     @room = Room.find params[:room_id]
39:     binding.pry
40:     @room.update_attributes(:connected => params[:room][:connected])
41: end

Несмотря на то, что в журналах сервера показано, что он вызывает connectedCreated при вызове из функции sessoinDisconected. Как понять, что происходит? В журналах сервера нет сообщений об ошибках.

1 Ответ

0 голосов
/ 07 января 2019

Я решил это. Это из-за строки: window.location.replace('<%= rooms_path %>');. Он перенаправляет на rooms_path, прежде чем полностью выполнит код контроллера. Я переместил код перенаправления на done часть ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...