devise + cancan не блокирует доступ к проблеме с индексом wherer @proj = Proj.all

Мы выяснили, что у нас была проблема с решением от @mattdlockyer (спасибо за решение!). При использовании свойства selector для конструктора popover, подобного этому ...

$(document.body').popover({selector: '[data-toggle=popover]'});

... предлагаемое решение для BS3 не будет работать. Вместо этого он создает второй экземпляр popover, локальный для своего $(this). Вот наше решение, чтобы предотвратить это:

$(document.body).on('click', function (e) {
    $('[data-toggle="popover"]').each(function () {
        //the 'is' for buttons that trigger popups
        //the 'has' for icons within a button that triggers a popup
        if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
            var bsPopover = $(this).data('bs.popover'); // Here's where the magic happens
            if (bsPopover) bsPopover.hide();
        }
    });
});

Как уже упоминалось, $(this).popover('hide'); создаст второй экземпляр из-за делегированного прослушивателя. Решение предоставило только скрытые popovers, которые уже были созданы.

Надеюсь, я смогу сэкономить вам время.

1
задан Nik So 27 August 2010 в 00:32
поделиться

1 ответ

Убедитесь, что вы вызываете load_and_authorize_resource в своем ProjectsController в соответствии со строками:

class ProjectsController < ApplicationController
  load_and_authorize_resource

  #...
end

Если это все еще не работает, попробуйте Позвонив в разрешите! внутри действия индекса, чтобы увидеть, имеет ли это значение, например:

class ProjectsController < ApplicationController
  #...

  def index
    @projects = Project.all
    authorize! :read, @projects
  end

  #...
end
2
ответ дан 2 September 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: