Я пишу программу, где элементы имеют несколько характеристик и несколько значений, а значения относятся к элементам и характеристикам. Мне нужно иметь возможность добавлять значения и характеристики в таблицу элементов несколько раз каждый (неограниченное количество раз).Rails Unlimited Self Joins As Alias
Есть ли способ получить таблицы соединений, которые выглядят так, с синтаксисом ruby?
SELECT items.*
FROM items
INNER JOIN characteristics ON characteristics.item_id = items.id AS characteristics1
INNER JOIN values ON value_items.item_id = item.id AS value1
INNER JOIN characteristics ON characteristics.item_id = items.id AS characteristics2
INNER JOIN values ON value_items.item_id = item.id AS value2
WHERE characteristics1.id = 1 AND
WHERE values1.value = "foo" AND
WHERE characteristics2.id = 2 AND
WHERE values2.value = "bar"
Это, как минимум, на самом деле, я должен иметь возможность связывать неограниченное количество самостоятельных соединений.
EDIT: работа с решением - еще нет.
Item.joins(:values).where("values.value=?", "foo").where("values.characteristic_id = 2")
Это работает, чтобы найти предметы, основанные на одной из характеристик. Однако, когда я пытаюсь найти элементы, которые удовлетворяют критерии по нескольким характеристикам, которые я получаю ActiveRecord::StatementInvalid: PG::DatatypeMismatch: ERROR: argument of WHERE must be type boolean, not type record
Я получаю эту ошибку, когда я пытаюсь либо из этих двух решений:
Item.joins(:values).where("values.value=?", ["foo", "bar"]).where("values.characteristic_id=?", [1, 2])
Item.includes(:values).where("values.value=?", ["foo", "bar"]).where("values.characteristic_id=?", [1, 2]).references(:values)
Было бы здорово, если бы вы делились отношениями между моделями и тем, что вы пытаетесь достичь. –
В основном то, что я делаю, позволяет пользователям создавать свои собственные таблицы.Пользователи решают, какие характеристики они хотят, присваивают значения этим характеристикам, а затем могут сортировать и фильтровать собственные таблицы, созданные пользователем. Таким образом, пользователи могут назначить неограниченное количество характеристик для своей таблицы. –
Не позволю мне по каким-либо причинам редактировать или просто поставить отношения на ОП. Элемент has_many: значения. Значение принадлежит_to: item. Значение принадлежит_от: характеристика. Характеристика has_many: значения. Характеристика принадлежит_to: collection. Коллекция has_many: items. Коллекция has_many: характеристики. –