Исходя из определенных классов, has_and_belongs_to_many
означает, что родитель может иметь много детей, а ребенок может принадлежать многим родителям. Это соответствует соотношению «многие ко многим» и, следовательно, требует ассоциативной (или соединительной) таблицы.
Для определенных выше классов rails будет искать child_objects_parent_objects
и выдает ошибку, если таблица не присутствует. Добавьте соединительную таблицу, как определено ниже
CREATE TABLE `child_objects_parent_objects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_object_id` int(11) NOT NULL,
`child_object_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
И затем приведенный ниже запрос вернет родительские объекты для данных дочерних объектов (params[:child_objects]
).
ParentObject.joins(:child_objects).where(child_objects: { id: child_object_ids})
Однако, если вы хотите, чтобы дочерний элемент принадлежал только одному родителю, определить таблицу отношений и соединений has_many
не потребуется.
class ParentObject < ApplicationRecord
has_many :child_objects
end
ParentObject.joins(:child_objects).where(child_objects: { id: child_object_ids})