2016-10-19 4 views
0

У меня есть индексный метод:запрессовки таблица и карта отображает

def index 
    if params[:city] || params[:lab_type] 
     @labs = Lab.in_city(params[:city]).with_type(params[:lab_type]).advanced_search(params[:search]).order(sort_column + " " + sort_direction) 
    else 
     @labs = Lab.advanced_search(params[:search]).order(sort_column + " " + sort_direction) 
    end 
    # Marker setup: 
    if @places.count > 1 
     @hash = Gmaps4rails.build_markers(@labs.select(:name, :latitude, :longitude)) do |lab, marker| 
      marker.lat lab.latitude 
      marker.lng lab.longitude 
     end 
    end 
    # Only labs with offer_items.count > 1 if filled_params 
    @labs = @labs.joins(:offer_items).group('labs.id').having('count(lab_id) > 1') if params[:filled_only] 
end 

С кодом, как это я могу использовать «filled_only» и производит результат, как и ожидалось - дает мне только лаборатории, которые имеют какое-либо предложение рассчитывать более чем 0 ;

Однако если поместить код с joins, group, having перед Marker setup и набор filled_only к true я получаю ошибку из моей базы данных, говоря:

ActiveRecord::StatementInvalid (PG::AmbiguousColumn: ERROR: column reference "id" is ambiguous 
LINE 1: ... BY labs.id HAVING (count(lab_id) > 1) ORDER BY id asc 

Что может быть причиной этого? Имеет ли код от Marker setup что-нибудь изменить в моей переменной @places?

ответ

0

Ошибка указывает на то, что вы выбрали не менее двух столбцов: id.

ORDER BY id asc

выглядит как у вас есть заказ по и запрос не может решить, какие таблицы имя столбца ID будет использоваться.

ORDER BY id ascORDER BY your_table_name.id asc, где your_table_name - название вашей таблицы, в которой идентификатор таблицы вы хотите отсортировать.

Похоже, что sort_column следует изменить.

+0

Я получил табличное имя из 'lab_instance.class.table_name' и добавил его к методу' sort_column', который: 'Lab.column_names.include? (Params [: sort])? params [: sort]: "labs.id" 'и я получаю' TypeError (без имплицитного преобразования Fixnum в Hash) ' – Ancinek

+0

Я вижу проблему. После всех соединений и т. Д. Методов при вызове '@ labs.count' он возвращает хэш istead числа – Ancinek

Смежные вопросы