在CanCan中使用accessible_by不会生成正确的SQL语句

时间:2013-10-24 18:21:43

标签: ruby-on-rails cancan

在我正在构建的应用中,用户可以向其帐户添加“贡献者”,以帮助他们为他们填写个人资料的某些方面。我使用cancan来帮助定义功能,但由于某种原因,为贡献者返回的查询以及他们有权访问的用户也无法正确返回。

这是我的能力档案:

module Abilities
  class UserAbility < Ability
    def initialize(user)
      super(user)

      if user.athlete_contributor?
        can :update, Athlete, user: { id: user.managed_athlete_ids }
      end
    end
  end
end

用户模型:

  has_many :contributorships
  has_many :managed_athletes, through: :contributorships, source: :athlete

贡献者模型:

class Contributorship < ActiveRecord::Base
  belongs_to :user
  belongs_to :athlete
  belongs_to :contributor, :class_name => "User"
  belongs_to :user_type

  attr_accessible :user_id, :user_type_id, :athlete_id

  validates :user_type, presence: true 
end

Contributor Dashboard Controller:

class ContributorController < ApplicationController
  before_filter :authenticate_user!

  def index
    authorize! :update, Athlete
    @athletes = Athlete.accessible_by(current_ability)
  end

end

@athletes实例变量返回

的查询
SELECT "users".* FROM "users" WHERE "users"."type" IN ('Athlete') AND ('t'='f')

不确定我做错了什么,但该查询看起来很糟糕,LOL。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我有一个非常类似的问题。 “Accessible_by”为我构建了一个错误的WHERE条件,但是当我将cancan升级到版本1.6.10时它就解决了。

我希望这可以:帮助@you;)