我在尝试为这个设计问题提出有效的解决方案时遇到了一些麻烦。从本质上讲,该应用程序具有公司模型。每个公司可以“定位”在多个位置(即旧金山,纽约,伦敦等)。同样,每个位置可以有多个与之关联的公司。因此,我的直觉是在公司模型和位置模型之间建立了has_many_belongs_to_many关系。例如:
公司A 在旧金山和纽约中有位置。
B公司在伦敦,旧金山和慕尼黑设有办事处。
公司C 在迈阿密中有位置。
目前,我的ActiveRecord关系设置如下:
class Company < ApplicationRecord
has_and_belongs_to_many :locations
end
class Location < ApplicationRecord
has_and_belongs_to_many :companies
end
我正在尝试实现用户可以“向公司添加位置”的功能,如果该位置已经存在,那么它将与该公司相关联。否则,如果该位置尚不存在,则会创建该位置,然后与该公司关联。按照上面的例子:
公司D 已创建。它在迈阿密和休斯顿有位置。由于迈阿密已经在数据库中,因此从迈阿密引用到公司D.但是,由于 Houston 不在表中,因此首先创建,然后在休斯顿和公司D 之间建立关系。
我认为这样做的一个好方法是使用某种独特的索引,但这阻止了我两次添加相同的城市(显然)。从本质上讲,有没有办法可以在公司和位置之间建立一种关系,“检查”输入的位置是否已经存在于位置表中,如果是,则进行引用/关联。不确定我是否正在接近正确的'Rails'方式或者使其过于复杂/我是否需要has_many_belongs_to_many关系。任何帮助/指导赞赏!提前致谢!
答案 0 :(得分:0)
有一种方法可以检查位置是否已经存在,然后创建公司和位置之间的关系,或者如果位置不存在,则首先创建位置,然后使用rails中的find_or_create
方法创建关系
在创建公司和位置关系的操作之前,在before_filter中使用此方法 https://apidock.com/rails/v3.2.1/ActiveRecord/Relation/first_or_create