Я пытаюсь преобразовать этот запрос из необработанного SQL в Arel (6.0.0), но я столкнулся с проблемами, которые у меня не было до того, как Arel был перестроен с нуля в более поздних версиях. Ошибка я получаю, в частности, является:undefined метод `joins 'для # <Arel :: SelectManager>
undefined method `joins' for #<Arel::SelectManager>
Эта ошибка возникает начинают в joins
запроса ActiveRecord, а затем добавление другой 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 Instance. Если кому-то это интересно, это если использовать в драгоценном камне thumbs_up
.
Любая помощь будет оценена!
То огромный беспорядок бу Я полагаю, что вы можете начать с просто 'Vote.joins (: a,: b,: c) .where (a: {some_column: 'foo'})'. Если у вас нет особых случаев, вам не нужно указывать Rails, как создавать запросы присоединения. И мутирующие настройки - плохой запах кода ... – max