1

cancan をインストールしたところ、すぐに小さな問題が発生しました。if_can を使用できるはずですか? リンクを非表示にするアクションを適用します。これは、もちろんユーザーが作成した情報のみが編集/削除リンクを表示できるようにするためです。

同じ問題を抱えている人を他に見つけることができませんでした。誰かが私を見て助けてくれたら、それは大歓迎です。

show.html:

<div id="photos">
    <% for photo in @gallery.photos %>
    <div class="photo">
        <%= image_tag photo.image_url(:thumb).to_s %>
        <div class="name"><%= photo.name %></div>
        <div class="actions">
            <% if can? :update, @photo %>
            <%= link_to "edit", edit_photo_path(photo) %> |
            <% end %>
            <% if can? :remove, @photo %>
            <%= link_to "remove", photo, :confirm => 'Are you sure?', :method => :delete %>
            <% end %>
        </div>
      </div>
    <% end %>
    <div class="clear"></div>
</div>

<p>
  <%= link_to "Add a Photo", new_photo_path(:gallery_id => @gallery) %>
|
  <%= link_to "Remove Gallery", @gallery, :confirm => 'Are you sure?', :method => :delete %> |
  <%= link_to "View Galleries", galleries_path %>
</p>

アビリティ.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    can :read, :all 
  end
end
4

2 に答える 2

1

OK、各コントローラーを認証する必要があります。これを行う最も簡単な方法は、写真から始めて、削除できないことを確認することです。次のようなものが必要になります。

can :delete, Photo do |photo|
  question.try(:user) == user
end   

あなたの能力.rbで。load_and_authorize_resource写真のコントローラーには、またはのいずれかを入れる必要がありますauthorize_resource

次に、あなたの見解では、したく<%if can :remove, photo %>ない<%if can :remove, @photo>. @photoあなたが持っているときにあなたが使おうとしているのは私には奇妙に思えます<for photo in @gallery.photos %>

于 2013-03-07T16:29:16.820 に答える
0

私もこの問題を経験しました。解決策は簡単ですAbility.rbクラスで次のようにします

class Ability
  include CanCan::Ability

  def initialize(user)
  user ||= User.new # guest user (not logged in)
  if user.role == "admin"
    can :update, Photo, :user_id => user.id
  end 
end 

次に index.html.erb で次のようにします

<% @photos.each do |photo| %>
 <%if can? :update, photo %>
  <!-- hide your links and buttons here-->
 <%end%>
<%end%>

注: "<%if can? :update, photo %>" では、"Photo" または "@photo" の代わりに "photo" と記述します。ここの写真は、ループを反復する真正なものであるためです。

于 2013-05-29T11:21:06.303 に答える