我正在使用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 %>
有关如何修复闪烁的任何建议,并获得ALWAYS的“销毁”链接出现给授权用户?还有其他人遇到过这个问题吗?
更多背景:我没有这个问题的另一段代码,而不是部分代码,如下所示:
<% if can? :update, @regatta %>
<%= link_to 'Edit Regatta Info', edit_regatta_path(@regatta) %> |
<% end %>
谢谢,所有。
答案 0 :(得分:0)
Ryan Bates在cancan github issue上实际上为我回答了这个问题。看起来Cancan对使用default_scope
的模型存在已知问题,记录为on this ticket。在我的情况下,event.rb
包含了对default_scope
的调用。把这条线完全解决了这个问题。
关于the second ticket的讨论表明这是Ruby on Rails的问题,正如本lighthouse ticket中所讨论的那样。
希望这可以帮助其他人解决这个奇怪的问题!谢谢,Ryan ......如果您碰巧在此发帖,我会把答案交给您。