【发布时间】:2016-06-13 22:14:40
【问题描述】:
我正在构建一个 RoR 应用程序 这是我原来的场景:
2 种模型,Clienti 和 Interventi
class Clienti < ActiveRecord::Base
has_many :interventi, :dependent => :destroy, :foreign_key => "cliente_id"
......
end
class Interventi < ActiveRecord::Base
belongs_to :clienti, :foreign_key => "cliente_id"
.........
end
这是一个简单的一对多关系,每个“clienti”都有很多“interventis”(iterventi 是我应用中的一种工作)。
今天我需要将这种关系从一对多转换为多对多,每个“interventi”需要有多个“clienti”,所以我认为我必须更改“cliente_id”列DB 从 int 到 text 并存储“Clienti's ids”数组(这是好方法吗?)
我的问题是:如果这是好方法,我怎样才能保持模型中的关联,以便我仍然可以使用“Clienti.Interventi.count”之类的东西?
谢谢大家!
【问题讨论】:
-
您将不得不制作第三个模型来建立多对多关系。如果您阅读官方 Rails 指南,您将拥有设置它所需的内容。 guides.rubyonrails.org/association_basics.html
-
Rails 解决这个问题的方法是在两者之间添加一个新模型,用作连接表(将来可能会有其他属性)。如果你能想出一个好名字,就用那个。如果没有,请使用
ClientiInterventi。它将同时属于 Clienti 和 Interventi; C + I will have_many ClientiInterventi.
标签: ruby-on-rails arrays activerecord activemodel