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