Добавить ограничение на кокон драгоценный камень - PullRequest
0 голосов
/ 05 сентября 2018

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

<div id ='secondaryparents'>
  <%= f.fields_for :secondaryparents do |builder| %>
  <%= render 'secondaryparent_fields', :f => builder %>
  <% end %>
  <%= link_to_add_association 'Add Secondary Parent', f, :secondaryparents, limit: 1 %>
</div>

Я попытался добавить предел: 1, но он не работает. Есть ли способ добиться этого?

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Мой предпочтительный подход заключается в том, чтобы скрыть ссылку для добавления новых элементов при достижении запрошенного номера.

Самый простой способ сделать это - использовать обратные вызовы cocoon:after-insert и cocoon:after-remove, подсчитать количество элементов, вставленных при срабатывании, и при необходимости скрыть / показать ссылку link_to_add_association.

Примечание: поскольку это imho выбор UX, он не реализован в коконе как функция. Я считаю, что лучше не показывать кликабельные вещи, которые, как мы знаем заранее, не дадут никаких результатов. Но мнения и практики различаются :)

Пример реализации: https://github.com/nathanvda/cocoon/wiki/How-to-limit-the-number-of-nested-fields

0 голосов
/ 05 сентября 2018
<script type="text/javascript">
  $(function() {
    // console.log('dfdsfdsf')
  // limits the number of categories
  $('#secondaryparents').on('cocoon:after-insert', function() {
    $('#add-category a').hide();
  });

  $('#secondaryparents').on('cocoon:after-remove', function() {
    $('#add-category a').show();
  });

    if (<%= @parent.secondaryparents.length %>) {
    $('#add-category a').hide();
  }

})
</script>
0 голосов
/ 05 сентября 2018

Вы можете отменить действие с событиями JS

https://github.com/nathanvda/cocoon#canceling-a-callback

Нечто подобное:

$('#secondaryparents').on('cocoon:before-insert', function(event, insertedItem) {
  if($('css seletor').length > 1){
    event.preventDefault();
  }
});
...