У меня есть эти таблицы в моей базе данных, Locations
и Services
Каждая запись Location
имеет атрибут, называемый location_ids
который является разделенным запятыми списком идентификаторов *.
* Я представлял свои отношения "многие-ко-многим" как это, потому что у меня много таблиц, похожих на " Services
и я не хочу иметь тонну ссылок
мои таблицы
CREATE TABLE services (
id bigint(20) UNSIGNED NOT NULL,
location_ids varchar(255) DEFAULT NULL,
image varchar(255) DEFAULT NULL,
created_at timestamp NULL DEFAULT NULL,
created_by bigint(20) UNSIGNED NOT NULL DEFAULT '0',
updated_at timestamp NULL DEFAULT NULL,
updated_by bigint(20) UNSIGNED DEFAULT NULL
);
CREATE TABLE locations (
id bigint(20) UNSIGNED NOT NULL,
street1 varchar(255) DEFAULT NULL,
street2 varchar(255) DEFAULT NULL,
city varchar(255) DEFAULT NULL,
province varchar(255) DEFAULT NULL,
country varchar(255) DEFAULT NULL,
postal_code varchar(255) DEFAULT NULL,
phone1 varchar(45) DEFAULT NULL,
phone2 varchar(45) DEFAULT NULL,
fax varchar(255) DEFAULT NULL,
email varchar(255) DEFAULT NULL,
twitter_url varchar(255) DEFAULT NULL,
facebook_url varchar(255) DEFAULT NULL,
created_at timestamp NULL DEFAULT NULL,
created_by bigint(20) UNSIGNED NOT NULL DEFAULT '0',
updated_at timestamp NULL DEFAULT NULL,
updated_by bigint(20) UNSIGNED DEFAULT NULL
);
Я пытаюсь получить все Services
которых идентификатор определенного местоположения (который я получаю из моих параметров) находится в этом атрибуте location_ids
.
Это запрос, который у меня (не работает), он может сделать более ясным то, что я пытался извлечь
Admin::Service.where("#{params[:location_id]} in (services.location_ids)")
* params [: location_id] будет идентификатором текущего местоположения
Любая помощь будет принята с благодарностью!
Обновить
Я завершил добавление 5 ссылок в моей базе данных, упростил и стал доступен через Rails. Спасибо всем, кто помог
Я закончил добавлять таблицы ссылок в моей базе данных. Работы, которые потребовались, чтобы добавить их, намного меньше, чем работа, которую это заставило бы меня сделать позже в моем проекте.
Пример того, что я использовал
Для моих служб я создал таблицу с именем location_services с ID
атрибутов, location_id
, service_id
. В моей модели для службы в Rails я сделал
В моей модели обслуживания
class Service < ApplicationRecord
has_many location_services, dependent: :destroy
has_many :locations, through: :location_services
accepts_nested_attributes_for :location_services
end
В моей модели LocationService
class LocationService < ApplicationRecord
belongs_to :location, optional: true
belongs_to :service, optional: true
end
И в моей модели местоположения
class Location < ApplicationRecord
has_many :location_services, dependent: :destroy
has_many :services, through: :location_services
end
Затем я повторил эти шаги для каждой из моих таблиц, которые имели отношение "многие ко многим" к таблице locations
Я согласен с @spickermann. Я настоятельно рекомендую вам использовать has_and_belongs_to_many или has_many: через отношения. Во всяком случае, я считаю, что это должно работать (не рекомендуется).
Admin::Service.all.select{ |service|
service.location_ids.split(',').map(&:to_i).include?(params[:location_id])
}