Ruby on rails 当查询有任何结果时,为什么平均作用域函数会带来关系?

Ruby on rails 当查询有任何结果时,为什么平均作用域函数会带来关系?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我发现Rails(4.2.7)活动记录模型中的作用域函数有问题 我在下面定义了范围函数来计算平均电影大小,也是一个相同的类方法: scope :average_size, -> { average(:file_file_size) } def self.average_size_test average(:file_file_size) end 当查询匹配某些记录时,scope和class方法按预期工作: 2.2.4 :037 > Video.average_

我发现Rails(4.2.7)活动记录模型中的作用域函数有问题

我在下面定义了范围函数来计算平均电影大小,也是一个相同的类方法:

  scope :average_size, -> { average(:file_file_size) }

  def self.average_size_test
    average(:file_file_size)
  end
当查询匹配某些记录时,scope和class方法按预期工作:

2.2.4 :037 > Video.average_size
=> #<BigDecimal:1d483b0,'0.1790511428 57143E6',18(36)>
2.2.4 :038 > Video.average_size_test
=> #<BigDecimal:4f278b8,'0.1790511428 57143E6',18(36)>
2.2.4:037>Video.average\u大小
=> #
2.2.4:038>视频平均大小测试
=> #
但是,当查询结果不匹配时,类方法和范围方法的结果不同:

2.2.4 :040 > Video.where(language: 'ch').average_size_test
 => nil 
2.2.4 :041 > Video.where(language: 'ch').average_size
 => #<ActiveRecord::Relation []>
2.2.4:040>视频。其中(语言:'ch')。平均大小测试
=>零
2.2.4:041>视频。其中(语言:“ch”)。平均大小
=> #

为什么会发生这种行为

这种行为的原因是
范围链接
。作用域总是返回
ActiveRecord::Relation
,而在
average\u size\u test
方法中调用则返回
nil
,没有结果。

这种行为的原因是
作用域链接。作用域总是返回
ActiveRecord::Relation
,而调用
average\u size\u test
方法则返回
nil
,没有结果。

然而,Rails官方指南说“这与定义类方法完全相同,您使用的方法取决于个人喜好。”这与定义类方法完全相同,您使用的方法取决于个人喜好: