Uncaught SyntaxError: неожиданный токен <в коде rails link_to - PullRequest
0 голосов
/ 05 января 2019

enter image description here Я пытаюсь использовать подход ujs для вызова пользовательской функции в контроллере. Я получаю эту ошибку:

Uncaught SyntaxError: Неожиданный токен <</p>

Я пытался напрямую использовать пользовательский URL. Это тоже не работает.

рейковые маршруты

   room_connected PUT    /rooms/:room_id/connected(.:format) rooms#connected
        rooms GET    /rooms(.:format)                    rooms#index
              POST   /rooms(.:format)                    rooms#create

routes.rb

 resources :rooms do
   put "connected", :to => "rooms#connected", as: :connected
 end

Функция Js в show.html.erb

session.on("connectionCreated", function(event) {
  connectionCount++;
  // jqueryFunction("Call from js to jquery");
   <%= link_to @room.name, room_connected_path(@room), :remote => true, :method => "put" %>
  displayConnectionCount();
});

Функция определена в room_controller.rb

def connected
    binding.pry
    @room = Room.find params[:id]
    # @room.update_attributes(params[:name])
end

Error 1: 6: 158 Uncaught SyntaxError: неожиданный токен <для строки <code><%= link_to @room.name, room_connected_path(@room), :remote => true, :method => "put" %>` which gets translated as below: `<a data-remote="true" rel="nofollow" data-method="put" href="/rooms/6/connected">uma7</a>

Error 2: «Подключенная» функция, определенная в контроллере, не вызывается. Пожалуйста, порекомендуйте. Спасибо

Пробовал Аякс:

   session.on("connectionCreated", function(event) {
  console.log("connectionCreated");
  console.log(room.id);
  connectionCount++;
  // jqueryFunction("Call from js to jquery");
   $.ajax({
    type: "PUT",
    data: JSON.stringify({ room: {name: 'New_room'}, _method:'put' }),
    url: "/rooms/" + room.id + "/connected",
    contentType: 'application/json'
}).done(function( msg )
{
    alert( "Data Saved: " + msg );
});
* +1036 *}); Это бросает: jquery.self-ee.js?body=1:10255 PUT http://localhost:3000/rooms/6/connected 500 (Internal Server Error)

Журналы сервера:

Started PUT "/rooms/undefined/connected" for 127.0.0.1 at 2019-01-06 09:29:13 -0800
Processing by RoomsController#connected as */*
  Parameters: {"room"=>{"name"=>"New_room"}, "room_id"=>"undefined"}

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

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

[1] pry(#<RoomsController>)> @room
=> nil

Ответы [ 2 ]

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

Проблема в том, что ваш ruby ​​находится в блоке javascript, поэтому он думает, что это javascript. Побег из JavaScript, как:

<%= j link_to @room.name, room_connected_path(@room), :remote => true, :method => "put" %>

или <%= escape_javascript link_to @room.name, room_connected_path(@room), :remote => true, :method => "put" %>

А также - добавьте ссылку на свой DOM, например:

$('#link').append(<%= j link_to... %>)

за пределами JS:

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

Вы заполняете функцию JS тегом, сгенерированным

  <%= link_to @room.name, room_connected_path(@room), :remote => true, :method => "put" %>

, поэтому он должен возвращать действительный JS, а не только HTML.

Я не уверен, чего вы здесь добиваетесь, но я бы начал с оборачивания сгенерированного HTML в кавычки, чтобы сделать его правильной строкой JS:

session.on("connectionCreated", function(event) {
  connectionCount++;
  // jqueryFunction("Call from js to jquery");
   '<%= link_to @room.name, room_connected_path(@room), :remote => true, :method => "put" %>'
  displayConnectionCount();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...