According to all documentation, the :read action is aliased to both :index and :show:
alias_action :index, show, :to =>
I posted this as an issue on GitHub. Ryan responded with the following:
Both the
:indexand:showactions point to the:readaction. But when CanCan authorizes a parent resource it uses the:readaction directly which is why you're seeing this behavior.I think this has caused confusion before, so I will change the internal behavior to never use the
:readaction directly. Instead of a:parentresource I'll change it to use:showand for theaccessible_bydefault I will use:indexinstead of:read. Thanks for bringing this to my attention.
https://github.com/ryanb/cancan/issues/302#comment_863142