Я использую Cancan для управления User
способностями и недавно столкнулся со странной проблемой: в моем фрагменте есть гиперссылка «уничтожить», которая появляется только иногда для авторизованных пользователей. Когда я обновляю страницу, неизвестно, будет ли ссылка существовать или нет.
Я определил способности для моей модели 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 %>
Спасибо всем.