0

我正在使用 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 %>

谢谢大家。

4

1 回答 1

0

Ryan Bates 实际上在这个cancan github 问题上为我回答了这个问题。看起来 Cancan 有一个已知的模型使用问题default_scope,记录在这张票上。就我而言,event.rb包括调用default_scope. 去掉那条线完全解决了这个问题。

关于第二张票的讨论表明这是 Ruby on Rails 的一个问题,正如在这个灯塔票中所讨论的那样。

希望这可以帮助其他人解决这个奇怪的问题!谢谢,瑞安......如果你碰巧在这个帖子上发帖,我会把答案转给你。

于 2010-12-06T23:03:45.680 回答