我的数据库里有这些表, 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访问。谢谢所有帮助过你的人
2条答案
按热度按时间pgccezyw1#
我同意斯皮克曼的观点。我强烈建议你通过人际关系使用has\u和\u属于\u many或has\u many。无论如何,我认为这应该是工作(不建议)。
5jdjgkvh2#
最后我在数据库中添加了链接表。添加它们所需的工作远远少于它将导致我在项目后期所做的工作。
我用的例子
对于我的服务,我用属性创建了一个名为location\u services的表
ID
,location_id
,service_id
. 在我的rails服务模型中,我做到了在我的服务模型中
在我的位置服务模型中
在我的位置模型中
然后,我对每个与我的表有多对多关系的表重复这些步骤
locations
table