рельсы UJS вызова на подмножестве класса - PullRequest
0 голосов
/ 11 мая 2019

В классе Usercontent есть записи, которые генерируются и показываются с помощью вызовов AJAX с турболинками, по сути, с помощью rails, кроме вызова jQuery3 в приложении rails 5.

Однако есть два случая рендеринга, один длявсе объекты класса (usercontent), еще один для подмножества (point), на той же странице, но в виде вкладок, с двумя различными формами и следующим usercontents.js javascript.

$(document).on('turbolinks:load', function() {
  $('[data-js-usercontent-form]').on("ajax:success", function(event, data, status, xhr){
    var usercontent = $(xhr.responseText).hide();
    $('#usercontents').append(usercontent);
    usercontent.fadeIn(1000);
  });

  $('[data-js-usercontent-id]').on("ajax:success", function(event, data, status, xhr){
    var usercontent_id = xhr.responseJSON.id;
    $('[data-js-usercontent-id=' + usercontent_id + ']').hide();
  });
  $('[data-js-point-form]').on("ajax:success", function(event, data, status, xhr){
    var point = $(xhr.responseText).hide();
    $('#points').append(point);
    point.fadeIn(1000);
  });    

  $('[data-js-point-id]').on("ajax:success", function(event, data, status, xhr){
    var point_id = xhr.responseJSON.id;
    $('[data-js-point-id=' + point_id + ']').hide();
  });
});

контроллер объявляет две коллекции

@usercontents = Usercontent.all
@points = Usercontent.where(['contenttype_id = ?', 1]).all

представление имеет два различных вызова коллекций

<div id=points class='tableize'>
  <%= render @points %>

<div id=usercontents class='tableize'>
  <%= render @usercontents %>

, которые, в свою очередь, вызывают отдельный элемент для обновления через AJAX _point.html.erb (обе части находятся в каталоге views / usercontents)

<div class='row' data-js-point-id=<%= point.id %>>

и _usercontent.html.erb

<div class='row' data-js-usercontent-id=<%= usercontent.id %>>

Проблема заключается в том, что первая отдает «полную» коллекцию с неправильным вызовом data-js:

<div id="points" class="tableize">
  <div class="row" data-js-usercontent-id="33"></div>
  <div class="row" data-js-usercontent-id="34"></div>
  <div class="row" data-js-usercontent-id="35"></div>
  <div class="row" data-js-usercontent-id="36"></div>
  <div class="row" data-js-usercontent-id="37"></div>
  <div class="row" data-js-usercontent-id="38"></div>
  <div class="row" data-js-usercontent-id="39"></div>
  <div class="row" data-js-usercontent-id="48"></div>
</div>

Очевидно, render @points не рендерится должным образом.Как это можно исправить?

1 Ответ

2 голосов
/ 11 мая 2019

Ваша проблема в том, что:

Rails определяет имя частичного для использования, просматривая имя модели в коллекции.
( source )

, что означает, что ваш частичный _point.html.erb никогда не используется.

Коллекция @points отображается в _usercontent.html.erb, поскольку она содержит Usercontent записей.

Чтобы исправить вашу проблему, визуализируйте частичное, указав правильный контекст:

<div id=points class='tableize'>
  <%= render partial: "point", collection: @points %>

...