加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:04:42 所属栏目:百科 来源:网络整理
导读:我的Contract模型上有一个范围,它使用merge并返回一个数组,而不是我想要的ActiveRecord :: Relation. 是的,我看过它说的是“It is an ActiveRecord::Relation,but Rails is intentionally lying to you”.但在这种情况下: 范围使用合并 它只有在它是链中的
我的Contract模型上有一个范围,它使用merge并返回一个数组,而不是我想要的ActiveRecord :: Relation.

是的,我看过它说的是“It is an ActiveRecord::Relation,but Rails is intentionally lying to you”.但在这种情况下:

>范围使用合并
>它只有在它是链中的最后一个范围时才有效
>它返回的对象说它是类Array
>它返回的对象在其祖先中没有任何关于ActiveRecord的信息
>调用ActiveRecord :: Relation方法(如返回值作用域)引发引发NoMethodError:[]:Array的未定义方法’scoped’.

范围在合同上,看起来像

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
# => [#<Contract id: 1>,#<Contract id: 2>]

contracts.class
# => #<ActiveRecord::Relation>

contracts.scoped.class
# => #<ActiveRecord::Relation>

contracts.arel
# => #<Arel::SelectManager:0x007fab629f7e90>

contracts.to_a
# => [#<Contract id: 1>,#<Contract id: 2>]

contracts.to_sql
# => SELECT distinct contracts.* FROM `contracts` INNER JOIN `divisions` ON `divisions`.`contract_id` = `contracts`.`id` WHERE `divisions`.`name` = 'Hourly' ORDER BY id

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读