2010-08-01 5 views
0

저는 약국의 레일 앱에 루비를 디자인하고 있으며, 그 중 하나는 약사가있는 상점이 있다는 것입니다. 또한 많은 상점에서 일할 수있는 약사도 있습니다. 이것은 HABTM의 일처럼 들립니다. 글쎄, 나는 초심자인데 수동으로 해결 방법을 고안했다. (왜냐하면 나는 HABTM에 대해 들어 본 적이 없기 때문에 기본적으로 나 자신에게 레일을 가르쳤고 좀 더 진보 된 관계를 결코 얻지 못했다.) 지금 약사가 저장되면 약사 컨트롤러의 작성 및 업데이트 작업에 몇 줄의 작업이있어 ​​작업하는 상점을 문자열로 변환하고 각 store_id는 쉼표로 구분됩니다. 그런 다음 저장소가 표시되면 MYSQL 요청을 @pharmacists = Pharmacist.find :all, :conditions => "stores REGEXP '#{@store.id}'"레일 has_and_belongs_to_many 또는 수동 구현

레일 기반 HABTM 시스템으로 옮기는 것이 더 효율적입니까? 물론 결국 코드가 적게 들지만 가치가 있습니까? 다른 말로하면, 적은 수의 코드를 사용하는 것 외에 어떤 이점이 레일을 통해 관리되도록이 연관성을 옮길 수 있습니까?

답변

1

이점은 당신이 직업에 적합한 도구를 사용한다는 것입니다! Rails와 같은 프레임 워크를 사용할 때의 요점은 휠을 다시 발명하지 않고도 일반적인 문제를 해결할 수 있다는 것입니다. 연결을 사용하면 관계형 데이터베이스를 적절하게 사용하고 외래 키 인덱싱과 같은 이점을 활용할 수 있습니다. 외래 키 인덱싱은 문자열 조작보다 빠릅니다.

조인 모델에 추가 속성 (예 : 약사가 상점에서 작업하기 시작한 날짜)을 저장해야하는 경우가 아니면 has_and_belongs_to_many 관계를 사용해야합니다.이 경우 has_many :through을 사용하십시오.

레일 연결을 사용하면 이와 같은 레일이 제공하는 모든 편리한 방법을 제공합니다 :

# Find the stores the first pharmacist works at 
@stores = Pharmacist.first.stores 

# Find the pharmacists who work at a store 
@pharmacists = Store.find_by_name('A Store').pharmacists 
+0

감사합니다! 구현하기가 너무 쉬웠습니다. 이전에 사용했던 코드의 약 1/5 정도가 예상보다 훨씬 쉬웠습니다. has_and_belongs_to_many 관계와 함께 제공되는 이러한 방법은 향후 프로젝트에서 유용하게 쓰일 것이며,이 프로젝트로 나아갈 수 있습니다. –

관련 문제