为什么我的ActiveRecord范围与`merge`返回一个数组?

我的Contract模型上有一个范围,它使用merge并返回一个数组,而不是我想要的ActiveRecord::Relation

是的,我看过它说“这是一个ActiveRecord :: Relation,但是Rails故意骗你” 。 但在这种情况下:

  • 范围使用merge
  • 它只有在它是链中的最后一个范围时才有效
  • 它返回的对象说它是类Array
  • 它返回的对象在其祖先中没有任何关于ActiveRecord的信息
  • 调用ActiveRecord::Relation方法(如返回值scoped会引发引发NoMethodError: undefined method 'scoped' for []:Array

范围是Contract ,看起来像

 scope :hourly, scoped.merge(Division.find_by_name!('Hourly').contracts) 

为什么这会返回一个数组? 我可以让它返回ActiveRecord::Relation吗?

以上评论意见。 我给了这个虚假的关系,我希望你有分部和合同。

 # app/models/contract.rb scope :hourly, select: 'distinct contracts.*', joins: :divisions, conditions: { "divisions.name" => 'Hourly' }, order: :id contracts = Contracts.hourly # => [#, #] contracts.class # => # contracts.scoped.class # => # contracts.arel # => # contracts.to_a # => [#, #] contracts.to_sql # => SELECT distinct contracts.* FROM `contracts` INNER JOIN `divisions` ON `divisions`.`contract_id` = `contracts`.`id` WHERE `divisions`.`name` = 'Hourly' ORDER BY id 

如果这是您正在寻找的,请告诉我…