Rails (5.2.2) AJAX-вызов для частичного не работает - PullRequest
0 голосов
/ 03 января 2019

Коротко и сладко, я следовал этому руководству точно при развертывании новых рельсов (5.2.2), используя rails g scaffold thing для генерации приложения.

Однако после создания частичного _show.html.erb в пункте Целевые изменения в руководстве нажатие кнопки «Изменить ниже» link_to не отображает частичное при тестировании. Я не получаю сообщения об ошибке, и Rails сообщает, что все отображается нормально, но на сайте ничего не происходит, когда я нажимаю на ссылку.

Чего мне не хватает?


код

controllers/things_controller

class ThingsController < ApplicationController

  def index
    @things = Thing.all
  end

  def show
  end

end

config/routes.rb

Rails.application.routes.draw do
  root 'things#index'
  resources :things
end

things/index.html.erb

<%# /app/views/things/index.html.erb %>
<%= link_to 'Change Below', thing_path(42), remote: true %>

<div id="target-for-change">
  Now you see "ME"!
</div>

things/show.js.erb

<%# /app/views/things/show.js.erb %>
$("#target-for-change").html("<%= j render(partial: 'show') %>");

things/_show.html.erb

<%# /app/views/things/_show.html.erb %>
Now you don't!

Вывод из консоли браузера :

Uncaught ReferenceError: $ is not defined
    at <anonymous>:1:1
    at processResponse (rails-ujs.self-d109d8c5c0194c8ad60b8838b2661c5596b5c955987f7cd4045eb2fb90ca5343.js?body=1:268)
    at rails-ujs.self-d109d8c5c0194c8ad60b8838b2661c5596b5c955987f7cd4045eb2fb90ca5343.js?body=1:196
    at XMLHttpRequest.xhr.onreadystatechange (rails-ujs.self-d109d8c5c0194c8ad60b8838b2661c5596b5c955987f7cd4045eb2fb90ca5343.js?body=1:251)

Ответы [ 2 ]

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

Как вы видите на консоли, «$» не определено.'$' является общим псевдонимом для jQuery, поэтому, когда вы делаете:

$("#target-for-change").html("<%= j render(partial: 'show') %>");

, вы говорите jQuery найти определенный идентификатор.Дело в том, что вы не включили библиотеку в свой проект.Чтобы сделать это, добавьте следующую строку в ваш gemfile:

gem 'jquery-rails'

, а затем это в ваших assets / javascripts / application.js

//= require jquery3
0 голосов
/ 03 января 2019

Вам нужно добавить jquery в ваш проект.Добавьте эту строку к application.html.erb

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

Или вы можете использовать гем jquery-rails

...