Ruby on rails CanCan,设置嵌套资源?

Ruby on rails CanCan,设置嵌套资源?,ruby-on-rails,ruby-on-rails-3,cancan,Ruby On Rails,Ruby On Rails 3,Cancan,我有以下型号: Group (id) Poll (id, group_id) PollVote (id, poll_id) 我不想做深度嵌套,这意味着我不想要/group/:id/poll/:id/poll\u-vote/:id 我想设置它,以便我的路线: /group/:id /poll/:id /poll/:id/poll_vote/:poll_vote_id 我有民意调查工作,但我不知道如何让民意调查工作。。。到目前为止,我已经: class PollVotesController &

我有以下型号:

Group (id)
Poll (id, group_id)
PollVote (id, poll_id)
我不想做深度嵌套,这意味着我不想要/group/:id/poll/:id/poll\u-vote/:id

我想设置它,以便我的路线:

/group/:id
/poll/:id
/poll/:id/poll_vote/:poll_vote_id
我有民意调查工作,但我不知道如何让民意调查工作。。。到目前为止,我已经:

class PollVotesController < ApplicationController

  # Authorization w Devise & CanCan
  before_filter :authenticate_user! # Devise, signed in users only
  load_and_authorize_resource :poll # CanCan
  load_and_authorize_resource :poll_vote, :through => :poll

  # We need to pass along the wall
    def current_ability
        @current_ability ||= Ability.new(current_user, @poll.group_id)
    end
我在民意投票中使用什么,让民意投票检查CanCan使用民意投票


谢谢

您尚未显示您的用户组关联,因此如果
用户拥有且属于多个:组

can :manage, [ Poll ] { |poll| user.groups.include?(poll.group) }
当然,您可能希望将其锁定为仅与用户关联的投票

编辑-以下是限制创建和编辑投票的示例:

can :read, PollVote # not needed if you have e.g. can :read, :all
can :create, [ PollVote ] { |poll_vote| user.groups.include?(poll_vote.poll.group) }
can [ :edit, :destroy ], [ PollVote ] { |poll_vote| poll_vote.user_id == user.id }

杰里米,谢谢你。。。我所困惑的是能力。rb我还需要一个can:manage,PollVote吗?还有,我如何将它锁定为仅与用户相关联的投票?非常感谢,很难找到关于这个嵌套东西的文档CanCan@AnApprentice当前位置我在回答中添加了更多示例。谢谢Jeremy,但我还是有点困惑。如果我在控制器中使用load_和authorize_resource:poll_vote,:through=>:poll,是否需要将PollVote添加到我的ability.rb中?不应该只是在能力上进行民意测验。rb处理好了吗?如果我想限制访问,就需要投票吗?
can :read, PollVote # not needed if you have e.g. can :read, :all
can :create, [ PollVote ] { |poll_vote| user.groups.include?(poll_vote.poll.group) }
can [ :edit, :destroy ], [ PollVote ] { |poll_vote| poll_vote.user_id == user.id }