Я пытаюсь создать запрос ActiveRecord в моем приложении Rails, который включает внутреннее соединение двух таблиц, хотя одна из записей, к которым я пытаюсь присоединиться, - это сериализованный массив (строка) , Например, у меня три таблицы. Ассоциации выглядеть следующим образом:Rails ActiveRecord join с массивом
Автомобиль:
serialize :categories_id, Array belongs_to :postings belong_to :categories
Категория:
has_many :cars has_many :postings, through: :cars
Проводка
has_many :categories, through: :cars has_many :cars
Это мой cars
стол (обратите внимание на массив):
select cars.* from cars
id: 23,
posting_id: 10,
categories_id: [1, 5, 20]
Это мой categories
стол:
select categories.* from categories
id: 20,
name: "BMW"
Это мой postings
стол:
select postings.* from postings
id: 20,
title: "First title",
description: null,
value: "open"
Джойн Я хочу для создания аналогичен этому:
select categories.* from categories inner join cars on categories.id =
cars.categories_id where cars.posting_id = 20
За исключением прямо сейчас, это не возвращает никаких результатов, потому что соединение на cars.category_id является массивом. Я в основном хочу вернуть все связанные categories
из столбца categories_id
в таблицу cars
. Есть идеи, как это сделать?
Шаг 1: Забудьте, что 'serialize' существует. Шаг 2. Используйте отдельную таблицу вместо этого 'serialize' kludgery. Шаг 3: ... Шаг 4: Прибыль. 'serialize' - это уродливый хак, который иногда кажется хорошей идеей в то время, но почти всегда приводит к боли, страданиям и слезам. Не используйте его. Когда-либо. –
Шаг 5: Вы поймете, что «сериализация» сделала вашу жизнь трудной, когда вы планируете интегрировать поиск. – Surya