Rails查询'加入'和'总和"'

时间:2017-12-24 09:31:05

标签: ruby-on-rails scope

我的模型Grain_input与" weight_fact"字段

class GrainInput < ApplicationRecord
  has_many :movements, as: :sourceable    
end

和模型运动&#34;金额&#34;字段

class Movement < ApplicationRecord
  belongs_to :sourceable, polymorphic: true
  belongs_to :targetable, polymorphic: true
end

grain_input有很多动作。例如,grain_input的一部分从存储到设备,其他部分在其他地方。 我需要得到所有仍存在于存储中的grain_input。 范围:

      scope :at_storage, -> { 
            joins(:movements).
            group("grain_inputs.id").
            having("sum(movements.amount) < grain_inputs.weight_fact") }

此范围有效,但仅返回具有移动的grain_inputs。 但是我需要grain_inputs,它也没有动作。

请帮助确定范围。

1 个答案:

答案 0 :(得分:0)

您可以尝试左连接

      scope :at_storage, -> { 
        joins("LEFT JOIN `movements` ON movements.grain_input_id = grain_inputs.id" ).
        group("grain_inputs.id").
        having("sum(movements.amount) < grain_inputs.weight_fact") }