ユーザーをdefault_scope
一連の企業に制限する User クラスがあります。
class User < ActiveRecord::Base
default_scope do
c_ids = Authorization.current_company_ids
includes(:companies).where(companies: { id: c_ids })
end
has_many :company_users
has_many :companies, through: company_users
end
class CompanyUser < ActiveRecord::Base
belongs_to :user
belongs_to :company
validates_uniqueness_of :company_id, scope: :user_id
end
class Company < ActiveRecord::Base
has_many :company_users
has_many :users, through: company_users
end
期待どおりに、またはUser.last
すべての作業と範囲を呼び出します。User.find_by_email('mhayes@widgetworks.com')
User.find(55557)
呼び出すUser.exists?(id)
と、奇妙なエラーがスローされます。
Mysql2::Error: Unknown column 'companies.id' in 'where clause': SELECT 1 AS one FROM `users` WHERE `companies`.`id` IN (4) AND `users`.`id` = 55557 LIMIT 1
基本的に、私がこれを取得している場合、それcompanies
は のコラムではないと言ってUser
います。SQLをステートメントにコピーしても、where
正しく評価されます。
User.where("SELECT 1 AS one FROM `users` WHERE `companies`.`id` IN (4) AND `users`.`id` = 66668 LIMIT 1")
と評価の順番があり、どういうわけか前に呼び出されていると思わせてdefault_scope
くれexists?
ますdefault_scope
。
私が電話した場合:
User.includes(:companies).where(companies: { id: [4] }).exists?(55557)
動作します。そして、これがdefault_scope
が行っていることなので、default_scope
スコープが失敗していないことはわかっています。