2010-12-05 5 views
0

Cancanを使用してUserの能力を制御しています。最近、奇妙な問題に遭遇しました:my partialには、ページを更新すると、リンクが存在するかどうかはわかりません。Cancanが承認されたリンクを常に表示するとは限りません

私は次のようにAbility.rbの私Eventモデルの能力を定義した:

can [:create, :update, :destroy], Event do |event| 
    user.regattas(true).include?(event.regatta) 
end 

何かが最近変更されています場合には、私は、キャッシュされた関連付けを使用してからシステムを防ぐためにregattas(true)を使用しています。

私のrspecテストでは、これは私のテストAbility.rbと私のEventsControllerテストの両方で、現在のユーザーにはうってつけです。

ここに破壊があります。

<% if can? :destroy, event %> 
    <td><%= link_to 'Destroy', event, :confirm => 'Are you sure?', :method => :delete %></td> 
<% end %> 

ちらつきを修正する方法について何かアドバイスをし、常にのために表示する「破壊」リンクを取得:私は、ユーザーがeventを破壊する能力を持っていたときに表示したいという、私の_event.html.erb部分にハイパーリンクを破壊します許可されたユーザーですか?他の誰かがこの問題にぶつかりましたか?

詳しい背景:私は、コードの別の部分のために、この問題を持っていない、部分的に、ここに示されていない:

<% if can? :update, @regatta %> 
    <%= link_to 'Edit Regatta Info', edit_regatta_path(@regatta) %> | 
<% end %> 

おかげで、すべてを。

答えて

0

Ryan Batesが実際に私にこの回答をしました。これはcancan github issueです。 Cancanはdefault_scopeを使用しているモデルで既知の問題を抱えているように見えますが、on this ticketと記載されています。私の場合、event.rbにはdefault_scopeが含まれていました。その行を完全に取り除いて問題を解決しました。

the second ticketについての議論では、これは、lighthouse ticketで説明されているように、これがRuby on Railsの問題であることが示されています。

これは、この奇妙な問題を持つ他の誰かに役立ちます。ありがとう、ライアン...あなたがこれに投稿した場合、私はあなたに答えを切り替えます。