2010-12-05 168 views
0

我正在使用Cancan来控制User的能力,并且最近遇到了一个奇怪的问题:我的部分有一个“销毁”超链接,有时仅供授权用户使用。当我刷新页面时,不知道链接是否存在。Cancan并不总是显示授权链接

我在这样定义的能力为我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 %> 

感谢所有。

回答

0

瑞恩贝茨实际上回答了这一个为我,在这cancan github issue。看起来像坎坎有使用default_scope的模型的已知问题,记录为on this ticket。在我的情况下,event.rb包括致电default_scope。采取这条线完全解决了这个问题。

关于the second ticket的讨论表明,这是Ruby on Rails的一个问题,如在lighthouse ticket中讨论的。

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