4

CanCan (過去と現在の CanCanCan) がテストのクエリに奇妙な SQL コードを追加するという問題があります。

私のモデル:

class Company < ActiveRecord::Base
  has_many :machines,           dependent: :destroy
end

class Machine < ActiveRecord::Base
  belongs_to :company
end

そして、私は CanCanCan 能力を持っています:

can :manage, :all
cannot [:manage, :read], Machine
can [:manage, :read], Machine, company_id: user.company_id
# other abilities also described as cannot / can pairs (legacy code) 

コードスニペットを実行すると:

user.company_id 
> 170
puts Machine.accessible_by(Ability.new(user)).to_sql

開発/生産では、次のものを持っています:

SELECT "machines".* FROM "machines" WHERE "company_id" = 170

仕様:

SELECT "machines".* FROM "machines"  WHERE ('t'='f')

その他のアビリティは良好に機能します(マシンに属するモデルを除く)。

たぶん、他の情報を追加する必要があります-お願いします.

UPD: :index を #accessible_by に追加しても役に立ちません:

puts Machine.accessible_by(Ability.new(user), :index).to_sql

CanCanCan v1.10.1

4

0 に答える 0