2016-06-13 6 views
1

내가이 내 원래의 시나리오 인의 RoR 응용 프로그램 을 짓고 있어요와 ActiveModel 협회 :루비 - 배열

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 

이있다 간단한 "일대 다 (one-to-many)"관계로, 각각의 "클라이언트"는 많은 "인터벤션"을 가지고 있습니다 (iterventi는 내 앱에서 일종의 일입니다).

오늘이 관계를 일대 다에서 다 대다 관계로 변환해야합니다. 각 "interventi"에는 하나 이상의 "clienti"가 있어야하므로 "cliente_id"열을 변경해야한다고 생각합니다. DB에서 int에서 텍스트로 "Clienti 's ids"배열을 저장하십시오. (좋은 방법입니까?)

제 질문은 : 좋은 방법이라면 어떻게 사용할 수 있습니까? "Clienti.Interventi.count"같은 것?

모두에게 감사드립니다!

+1

Clienti.first.interventis.count 또는 Interventi.first.clientis.count, 당신이하던대로하고있다 유지할 수 있습니다 다 대다 관계. 레일스 공식 가이드를 읽었다면 이것을 설정해야 할 것입니다. http://guides.rubyonrails.org/association_basics.html –

+1

레일즈 방법은 조인 테이블 역할을하는 새로운 모델을 추가하는 것입니다 (나중에 추가 속성이있을 수도 있음). 좋은 이름을 생각해 내면 사용할 수 있습니다. 그렇지 않으면'ClientiInterventi'를 사용하십시오. 그것은 Clienti와 Interventi에 속할 것입니다; C + 나는 둘 다 ClientiInterventi를 가질 것이다. – Raffael

답변

1

이 종류의 many-to-many 연관을 수행하려면 조인 모델이 필요합니다. 관례 적으로,이 설정으로 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 

를 호출 할 수, 당신은 설정하는 제 3의 모델을 만들뿐만 아니라, 당신은거야

+1

완벽한 !!! 덕분에 모두! – EffeBi