Any possible way to add parameters to ON clause on include left joins on rails?

二次信任 提交于 2019-12-10 12:18:26

问题


I have a huge complex query like this:

@objects = Object.joins({ x: :y }).includes(
  [:s, { x: { y: :z } }, { l: :m },:q, :w,
    { important_thing: 
      [:h, :v, :c,:l, :b, { :k [:u, :a] }]  
    }
  ]).where(conditions).order("x.foo, x.bar")

Then i want to show all Objects and only Important_things that were created at between two dates.

If i put this on there where clause i dont get all Objects, only Objects that has Important_things between informed dates.

A solution using raw sql was this:

select * from objects left join important_things on important_things.object_id = objets.id and important_things.created_at between 'x' and 'y'

Instead of:

select * from objects left join important_things on important_things.object_id = objets.id where important_things.created_at between 'x' and 'y'

I really need all those objects and i don't want to use a raw SQL, any workaround or a possibility to pass parameters to the ON clause on an association?


回答1:


I do this,

class VendorsRatings < ActiveRecord::Base

  def self.ratings(v_ids,sort = "DESC")

    joins("RIGHT OUTER JOIN vendors_lists v 
           ON v.vendor_id = vendors_ratings.vendor_id").where(conditions)

  end 

end



回答2:


I did a ugly workaround:

class Parent < ActiveRecord::Base
  cattr_accessor :dt_begin, dt_end
  has_many :children, conditions: Proc.new { { created_at: (@@dt_begin..@@dt_end) } }
end

class MetasController < ApplicationController
  def index
    Parent.dt_begin = Date.parse(param[:dt_begin])
    Parent.dt_end = Date.parse(param[:dt_end])

    @parents = Parent.includes(:children).where("children.age = ?", params[:age])
  end
end

So this way i get all Parents even if i dont have Children created_at between those specified dates.

And the most important part of it i have all objects inside the ActiveRecord.

But be careful because i did messed with cattr_accessor so i have to set everytime before i search for Parents.



来源:https://stackoverflow.com/questions/15441012/any-possible-way-to-add-parameters-to-on-clause-on-include-left-joins-on-rails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!