문제

일반적인 혼란
나는 3 장의 장르를 가질 수있는 밴드가 있습니다. 나는 a에서 읽었다 이전 SO 게시물 이것을 처리하는 올바른 방법은 몇 단계입니다.

1) Band.rb

has_and_belongs_to_many :genres

2) 밴드 genres 조인 테이블을 만듭니다

문서를 읽은 후에도 Habtm이 실제로 무엇을 의미하는지에 대해 약간 혼란스러워합니다. 나는 보통 "밴드에는 많은 장르가있다"고 생각할 것 같아요. 그래서 그것에 대한 빠른 멍청한 설명은 좋을 것입니다.

비품과의 혼동

또한 밴드 genres에 대한 내 비품을 할 때

{ 
  "The Reaper Band and Funk": { "band": "The Reaper Band", "genre": "Funk" },
  "The Reaper Band and Rock": { "band": "The Reaper Band", "genre": "Rock" }  
}

그리고 나는 "알 수없는"밴드 열을 얻습니다. 나는 Rails가 "The Reaper Band"가 밴드 고정물의 밴드를 언급 할 것이라는 것을 알고 있다고 생각했고 (물론 동일한 이름) 그 ID를 잡고이 고정물의 "밴드"가 Join 테이블의 Band_id를 참조 할 것임을 알게 될 것입니다. . 오히려 내 비품은 하드 코딩 된 숫자보다 이렇게 보일 것입니다.

공장과의 혼란

공장에서 밴드를 만들 때 장르를 할당하고 싶습니다.

Factory.define :band do |f|
  f.sequence(:name) { |n| "Band#{n}" }
  f.mailing_lists { |mailing_lists| [mailing_lists.association(:mailing_list)] }
  f.genres 2
end

나는 여기서 하드 코딩 된 장르 _id가 필요할 것이라는 것을 알고 있습니다. 그러나 왜 레일이 그것을보고 "아, 그는 밴드 genres 테이블에 ID = 2가있는 장르를 추가하고 싶다"고 말하지 않는 이유는 무엇입니까?

나는 철도가 나를 위해 모든 더러운 일을 돌볼 것을 기대하지는 않지만 규칙에 따라 플레이하고 싶습니다.

도움이 되었습니까?

해결책

  1. 많은 사람들이 양방향으로 관계를 정의하고 속합니다. 밴드가 속한 장르 만 볼 필요가 있다면 Has_many는 괜찮을 것입니다. 어떤 밴드가 "Funk"인지 알고 싶다면 HABTM을 사용하여 주어진 장르의 밴드를 조회 할 수 있습니다.
  2. 비품의 경우, 레일에서 이제 조인 테이블에 대한 별도의 고정물을 만들지 않고 HABTM을 수행 할 수 있습니다. 예를 들어:

in bands.yml :

reaper_band:
  name: The Reaper Band
  genres: funk, rock

grenres.yml :

funk:
  name: Funk
  bands: reaper_band

rock:
  name: Rock
  bands: reaper_band
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top