2010-07-23 6 views
-1

여러 모델 (다른 모델로 표시)에 살 수있는 한 모델의 사용자가 있습니다. 새로운 사용자를 만들면 거주하고있는 다른 마을을 선택 (및 편집)해야합니다. 시간 제약으로 인해 종종 http://blog.hasmanythrough.com/2006/4/20/many-to-many-dance-off과 같은 것을 포함하는 "원하는 것보다 더 나은 솔루션"으로 끝납니다.ruby ​​on rails에서 다 - 대 - 다 관계를 처리하는 가장 깨끗한 방법은 무엇입니까?

SO와 함께 인기있는 멋진 솔루션이 있습니까?

환호 ...

Slothishtype

+0

무엇을하려고합니까?! –

답변

0

은 has_and_belongs_to_many 협회는 바로이 상황에 지어졌습니다. http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many

그렇지 않으면 협회 자체에 대한 정보 (도시 테이블이나 사용자 테이블에는 존재하지 않지만 그 사이에있는 필드)는 정보를 저장해야하는 경우, 병렬 'has_many_through'연관을 설정하고 별도의 'user_city'테이블을 설정합니다. 그래서, 사용자 테이블

has_many :user_cities 
has_many :cities, :through => :user_cities 

has_many :user_cities 
has_many :users, :through => :user_cities 

그런 도시 테이블에있을 것입니다 당신은 단지 호출 할 수 user.cities를, 사용자가에 살고있는 도시의 목록을 얻을.

+0

많은 관계를 맺고 있지만 관계를 만들 때 지저분한 코드로 끝납니다. 예를 들어 siteperiod와 관련된 사이트 및 기간이 있습니다. 내 컨트롤러에서 "동작을 만들"내가 좋아하는 뭔가를 구현 : #Add을 기간 경우 (PARAMS [: 기간]) \t siteperiod.destroy site.siteperiods @에서 siteperiod에 대한 #Delete 현재 기간 끝 에 대한 period_id PARAMS에서 [: 기간] \t siteperiod = Siteperiod.new \t siteperiod.period_id = period_id \t siteperiod.site_id = @ 단부 단부 \t siteperiod.save site.id ,174,이것은 나를 추악한 추악한 컨트롤러로 남겨 둡니다. 모두 매우 un-rails-like. 건배 ... Slothistype – slotishtype

+0

잠깐, 나는 이해할 수 없다고 생각합니다.이 예에서 사이트가 site_period를 통해 여러 기간에 속한다면, 왜 자동으로 사이트를 삭제하겠습니까? 더 이상 기간과 관련이 있습니까? 당신이 죽었다면, 당신은 그것을 의존적이게 만들 수 있고, 그것은 자신의 것에서 삭제할 것입니다, 그렇지만 나는 뭔가를 놓치고 있어야한다고 생각하고 있습니까? – jasonpgignac

관련 문제