2016-03-22 3 views
0

Я сделал выбор, используя активную запись с большим количеством подключений. Это привело к дублированию значений. После выберите функция есть отличная функция со значением: id. Но это не сработало!ActiveRecord не работает

Вот код:

def join_query 
    <<-SQL 
    LEFT JOIN orders on orders.purchase_id = purchases.id 
    LEFT JOIN products on products.id = orders.complete_product_id 
    SQL 
end 

def select_query 
    <<-SQL 
    purchases.*, 
    products.reference_code as products_reference_code 
    SQL 
end 

result = Purchase.joins(join_query) 
       .select(select_query) 
       .distinct(:id) 

Конечно, ни различны! или uniq функции работали. отличный! ответил (а) сообщение "ActiveRecord :: ImmutableRelation", что я не знаю, что это значит.

Чтобы исправить это, я сделал взлом, преобразовывая объект ActiveRecord_Relation в массив, и я использовал функцию uniq uniq Ruby.

Что здесь происходит?

+0

'ImmutableRelation' означает, что ActiveRecord [уже принес запрос] (http://api.rubyonrails.org/classes/ActiveRecord/ImmutableRelation.html). Попробуйте положить свои «соединения» в конце. – sjagr

+0

Какие СУБД вы используете? Что вы видите, если не используете '.distinct (: id)'? Я сомневаюсь, что использование '.distinct (: id)' является проблемой, поскольку оно пытается выбрать записи, которые извлекаются. –

ответ

0

попробовать это:

def select_query 
    <<-SQL 
    DISTINCT ON (purchases.id) purchases.id, 
    products.reference_code as products_reference_code 
    SQL 
end 

add more comma separated column names in select clause 

Purchase.select(select_query).joins(join_query) 
Смежные вопросы