2015-10-08 2 views
0

У меня есть модель автомобилей в моем приложении для рельсов, в которой есть три столбца Car_id, car_name и fuel_type. Так что в моем столе car_name приходит много раз.Фильтрация стола в рельсах в соответствии с определенными значениями столбцов

Я хочу знать, как я могу отфильтровать этот стол автомобиля так, чтобы одно имя_каталога отображалось только один раз в возвращаемом массиве?

Я хочу, чтобы полный отфильтрованный стол возвращался не только с отдельными названиями автомобилей.

+0

Что вы имеете в виду 'car_name' приходит много раз? – Pavan

+0

Я имею в виду название автомобиля, такого как Hyundai I10, во многих рядах. И я хочу отфильтровать таблицу так, чтобы это имя приходилось только один раз в возвращенной таблице. –

ответ

0

Это вы что искали?

Car.group(:car_name).all

+0

Эта функция отлично работает в разработке (база данных sqlite), но дает ошибка в базе данных Postgres –

+0

Этот код отлично работает в базе данных sqlite, но дает ошибку в базе данных postgres. Это ошибка, которую я получаю PG :: GroupingError: ERROR: столбец «cars.id» должен появиться в предложении GROUP BY или использоваться в агрегированной функции. –

+0

http://stackoverflow.com/a/20942527/908842 – Kalman

0

Может быть, вы должны использовать это:

cars = Cars.all.uniq {|c| c.car_name} 

Это фильтруются массив автомобилей по car_name атрибута.

+0

Нет, это не делает фильтрацию, он выбирает уникальные строки на основе car_id, который является первичным ключом таблицы, поэтому он возвращает всю таблицу обратно. Я хочу, чтобы функция uniq работала над столбцом car_name, а не в столбце car_id –

+0

В моем ответе есть 'car_name'. О_О. –

+0

Я не знаю почему, но это не работает. Если я использую функцию Car.select (: car_name) .distinct, то я могу получить все уникальные имена, но мне нужна полная строка, а не только одно car_name –

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