在我正在构建的应用中,用户可以向其帐户添加“贡献者”,以帮助他们为他们填写个人资料的某些方面。我使用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。在此先感谢您的帮助!
答案 0 :(得分:0)
我有一个非常类似的问题。 “Accessible_by”为我构建了一个错误的WHERE条件,但是当我将cancan升级到版本1.6.10时它就解决了。
我希望这可以:帮助@you;)