我試圖將此查詢從原始SQL轉換爲Arel(6.0.0),但我遇到了在Arel重建之前從未遇到的問題從最初的版本開始。我得到的錯誤具體是:發生未定義的方法'連接'爲#<Arel :: SelectManager>
undefined method `joins' for #<Arel::SelectManager>
此錯誤是開始一個ActiveRecord joins
查詢,然後追加另一個joins
。任何想法,我應該如何結合與ActiveRecord的連接(和阿雷爾謂詞?)
新代碼:
v = o.joins(Vote.table_name).on(Vote.arel_table[:voteable_type].eq(o.to_s).and(Vote.arel_table[:voteable_id].eq(o.arel_table[o.primary_key])))
v = v.joins(self.class.base_class.table_name).on(self.base_class.arel_table[self.class.base_class.primary_key].eq(o.arel_table[p[0]]))
v = v.where(self.class.base_class.areal_table[self.class.base_class.primary_key].eq(self.id))
從轉換:
v = o.where(["#{self.class.base_class.table_name}.#{self.class.base_class.primary_key} = ?", self.id])
v = v.joins("INNER JOIN #{Vote.table_name} ON #{Vote.table_name}.voteable_type = '#{o.to_s}' AND #{Vote.table_name}.voteable_id = #{o.table_name}.#{o.primary_key}")
v = v.joins("INNER JOIN #{self.class.base_class.table_name} ON #{self.class.base_class.table_name}.#{self.class.base_class.primary_key} = #{o.table_name}.#{p[0]}")
o
是ActionModel實例。 如果任何人有興趣,這個如果用於thumbs_up
寶石。
任何幫助,將不勝感激!
那是一個巨大的混亂BU我相信你應該能夠簡單地通過'Vote.joins(:a,:b,:c).where(a:{some_column:'foo'})''開始。除非你有比較特殊的情況,否則你不需要告訴Rails如何創建連接查詢。變異的分配是一種不好的代碼氣味... – max