Выбор записей, где идентификатор находится в списке идентификаторов, хранящихся в качестве атрибута

0

У меня есть эти таблицы в моей базе данных, 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. Спасибо всем, кто помог

  • 0
    Похоже, сервис не имеет столбец с именем идентификаторы местоположения, его идентификатор местоположения
  • 0
    это на самом деле типа извините, я это исправил
Показать ещё 6 комментариев

2 ответа

0
Лучший ответ

Я закончил добавлять таблицы ссылок в моей базе данных. Работы, которые потребовались, чтобы добавить их, намного меньше, чем работа, которую это заставило бы меня сделать позже в моем проекте.

Пример того, что я использовал

Для моих служб я создал таблицу с именем 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

0

Я согласен с @spickermann. Я настоятельно рекомендую вам использовать has_and_belongs_to_many или has_many: через отношения. Во всяком случае, я считаю, что это должно работать (не рекомендуется).

Admin::Service.all.select{ |service| 
    service.location_ids.split(',').map(&:to_i).include?(params[:location_id])
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню