我将这些保存到数据库Locations
和Services
中的表中
每个Location
记录都有一个名为location_ids
的属性,该属性是用逗号分隔的ID *列表。
*我之所以这样表示我的多对多关系,是因为我有许多类似于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
,其中某个特定位置的ID(从我的参数中获取)位于该location_ids
属性中。
这是我所拥有的查询(不起作用),它可以使我试图检索的内容更加清楚
Admin::Service.where("#{params[:location_id]} in (services.location_ids)")
* params [:location_id]将是当前位置的ID
任何帮助将不胜感激!
更新
我结束了在数据库中添加5个链接表的工作,这使它更容易通过Rails访问。 谢谢大家的帮助
答案 0 :(得分:0)
我同意@spickermann。我强烈建议您使用has_and_belongs_to_many或has_many:through关系。无论如何,我认为这应该可行(不推荐)。
Admin::Service.all.select{ |service|
service.location_ids.split(',').map(&:to_i).include?(params[:location_id])
}
答案 1 :(得分: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
表有多对多关系的每个表重复这些步骤