CanCan gem の使用に問題があります。
私はability.rbファイルを持っています:
if user.nil?
can :read, :all
elsif user.admin?
can :manage, Publication
else
can [:read, :create], Publication
can [:update, :destroy], Publication, :user_id => user.id
end
そして、それはpublication.rbです:
attr_accessible :content,:title
belongs_to :user
validates :user_id, presence: true
validates :title, presence: true, length: { maximum: 140 }
validates :content, presence: true, length: { minimum: 240 }
default_scope order: 'publications.created_at DESC'
パブリケーションの場合は index.html.erb です。
<% @publications.each do |publicate| %>
<h3><%= publicate.title %></h3>
<% if can? :update, :destroy, Publication %>
<%= link_to "Update", edit_publication_path(publicate) %>
|<%= link_to " delete", publicate, method: :delete,
data: { confirm: "Are you sure?" } %>
<% end %>
<% end %>
delete
そして、それは表示されず、Update
リンクされていません。また、それが管理者またはログインユーザーである場合。しかし、私が変更した場合ability.rb
:
elsif user.admin?
can :manage, Publication
Publication
にUser
、それは機能し、ユーザービューでリンクが削除されているのがわかります:
<% @users.each do |user| %>
<li>
<%= link_to user.username, user %>
<% if can? :destroy, user %>
| <%= link_to "delete", user, method: :delete,
data: { confirm: "Are you sure?" } %>
<% end %>
</li>
<% end %>
そしてuser.admin can :manage, :all
、それはユーザーや出版物でも機能します。CanCan がパブリケーション能力を無視するのはなぜですか?