选择id在作为属性存储的id列表中的记录

gcuhipw9  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(361)

我的数据库里有这些表, Locations 以及 Services 每个 Location 记录有一个名为 location_ids 它是以逗号分隔的ID列表*。

  • 我这样表示我的多对多关系,因为我有许多类似的表 Services 不想有太多的链接表

我的table

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 其中一个特定位置的id(我从params得到的)在 location_ids 属性。
这是我的查询(不起作用),它可能会使我试图检索的内容更清楚 Admin::Service.where("#{params[:location_id]} in (services.location_ids)") *params[:location\u id]将是当前位置的id
任何帮助都将不胜感激!
更新
我结束了在我的数据库中添加5个链接表的过程,这使得它更容易通过rails访问。谢谢所有帮助过你的人

pgccezyw

pgccezyw1#

我同意斯皮克曼的观点。我强烈建议你通过人际关系使用has\u和\u属于\u many或has\u many。无论如何,我认为这应该是工作(不建议)。

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

5jdjgkvh2#

最后我在数据库中添加了链接表。添加它们所需的工作远远少于它将导致我在项目后期所做的工作。
我用的例子
对于我的服务,我用属性创建了一个名为location\u 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

在我的位置服务模型中

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 table

相关问题