Я использую Cancan для управления способностями User
, и недавно у меня возникла странная проблема: у моей части есть гиперссылка "destroy", которая иногда появляется только для авторизованных пользователей.Когда я обновляю страницу, неясно, будет ли ссылка существовать или нет.
Я определил способности для моей Event
модели в Ability.rb
следующим образом:
can [:create, :update, :destroy], Event do |event|
user.regattas(true).include?(event.regatta)
end
Я использую regattas(true)
для предотвращения использования системой кэшированных ассоциаций в случае, если что-то недавно изменилось.
В моих тестах rspec это отлично работает для текущего пользователя, как в моих тестах для Ability.rb
и мои EventsController
тесты.
Вот уничтожить.уничтожить гиперссылку в моем _event.html.erb
частичке, которую я хочу отображать только тогда, когда у пользователя есть возможность уничтожить event
:
<% if can? :destroy, event %>
<td><%= link_to 'Destroy', event, :confirm => 'Are you sure?', :method => :delete %></td>
<% end %>
Любой совет, как исправить мерцание и получить «Уничтожить»ссылка на ВСЕГДА отображается для авторизованных пользователей?Кто-нибудь еще сталкивался с этой проблемой?
Больше предыстории: у меня нет этой проблемы для другого фрагмента кода, не частично, показанного здесь:
<% if can? :update, @regatta %>
<%= link_to 'Edit Regatta Info', edit_regatta_path(@regatta) %> |
<% end %>
Спасибо, все.