为什么我的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
如果这是您正在寻找的,请告诉我…