2012-09-24 1 views
0

하위 범주의 쉼표로 구분 된 목록 인 속성 subcategory_list를 가진 자원 모델이 있습니다. 특정 하위 카테고리에 속한 리소스 만 가져 오는 find_by_x 메소드 (또는 이와 동등한 메소드)를 수행 할 수 있습니까?ActiveRecord는?()가 일치 할 때를 찾습니다.

는 그래서 만약 주어진 :

Resource.create(subcategory_list: "Fun, Games") # resource 1 
Resource.create(subcategory_list: "Fun") # resource 2 
Resource.create(subcategory_list: "Games") # resource 3 

나는 1과 2는 내 입력이 "재미"모두 자원을 얻기 위해 쿼리를해야합니다. 나뿐만 아니라 "재미, 게임"을 포함하려면이 쿼리를 수정할 수있는 방법이 있나요 다음

Resource.find_all_by_subcategory_list("Fun") 
=> resource 2 (but not resource 1) 

만 "재미"가 아니라 "재미, 게임"를 반환 할 수 있습니까?

Resource.where('subcategory_list LIKE ?', "%Fun%") 

subcategory 경우에 연관된 모델 :

답변

2

subcategory_list 경우 쉼표로 구분 된 문자열 내가 MrTheWalrus에 동의

Resource.joins(:subcategories).where('subcategories.name = ?', "Fun") 
+0

아름다운. 감사! – tyler

1

,하지만 당신은 또한 Michael Bleigh에 의해 acts_as_taggable_on을 확인 할 수 있습니다 . 당신이하고있는 것이 Resource와 연관된 태그 인 것처럼 보이고 acts_as_taggable_on gem은 지금하고있는 것을 포함하여 많은 추가 코드를 작성할 필요없이 많은 힘을 추가 할 것입니다.

+1

나는 ActsAsTaggableOn을 제거하기 위해 실제로 구조 조정을하고 있습니다. 추가 기능을 모두 필요로하지 않고 데이터베이스를 가능한 한 적게하고 싶기 때문입니다. 상자 기능과 쉬운 설치를 위해, 나는 동의한다! – tyler

+0

이제 왜 그렇게하려고하는지 이해가됩니다. 알아 둘만한. MrTheWalrus가 제안한 것과 확실히 같습니다. – Josh

관련 문제