2016-06-13 114 views
1

我建立一個回報率的應用 這是我原來的加載ActiveModel情景聯想:Ruby on Rails的 - 與陣列

2款,Clienti與干預

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」列從數據庫從int到文本和存儲「Clienti的ID」數組(是否是好方法?)

我的問題是:如果這是好方法,我如何保持模型中的關聯,所以我仍然可以使用像「Clienti.Interventi.count」?

謝謝大家!

+1

你會不得不作出一個第三模型建立多對多的關係。如果你閱讀官方的Rails指南,你會有什麼需要設置。 http://guides.rubyonrails.org/association_basics.html –

+1

Rails解決這個問題的方法是在兩者之間添加一個充當連接表的新模型(並且將來可能會有其他屬性)。如果你能想出一個好名字,就用它。如果沒有,使用'ClientiInterventi'。它將屬於Clienti和Interventi; C +我都會擁有ClientiInterventi。 – Raffael

回答

1

你需要一個連接模型來完成這種多對多的關聯。按照慣例,你可以把它叫做clienti_interventi

class Clienti 
    has_many :clienti_interventis 
    has_many :interventis, through: :clienti_interventis 
end 

class Interventi 
    has_many :clienti_interventis 
    has_many :clientis, through: :clienti_interventis 
end 

class ClientiInterventi 
    belongs_to :clienti 
    belongs_to :interventi 
end 

有了這個設置,你可以繼續做任何你在做什麼,以及Clienti.first.interventis.countInterventi.first.clientis.count

+1

完美!謝謝大家 ! – EffeBi