1

tags_list (acts_as_taggable의)가있는 사용자 및 문서 모델이 있습니다.레일 : 하위 요소에 다른 배열이 포함 된 레코드는 어떻게 검색합니까?

특정 사용자의 태그가있는 문서를 찾고 싶습니다. 문서 A, B, C를 검색 할 것> -

user.tag_list = ["ceo" , "sales"] 
documentA.tag_list = ["ceo"] 
documentB.tag_list = ["all-users'] 
documentC.tag_list = ["sales", "marketing"] 
documentD.tag_list = ["marketing"] 

, 예를 들어, 그래서 나는

Document.where(tag_list.includes_any?("all-users" || user.tag_list))
처럼 뭔가를 할 수 있습니다.

분명히 구문이 잘못되었지만 아이디어를 얻었습니다. 어떻게 효율적으로이 작업을 수행 할 수 있습니까?

------- 갱신

참고하시기 바랍니다 tag_list가 사용자 또는 문서 모델하지만 acts_as_taggable 보석에서 액티브 레코드 관계 중의 직접적인 속성이되지 않습니다 : 나는이 전화를 얼마나 . 연산자?

2.1.1 :036 > Document.last.tag_list 
    Document Load (3.7ms) SELECT "assignable_objects".* FROM "assignable_objects" WHERE "assignable_objects"."type" IN ('Document') ORDER BY "assignable_objects"."id" DESC LIMIT 1 
    ActsAsTaggableOn::Tag Load (3.5ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND (taggings.context = 'tags' AND taggings.tagger_id IS NULL) [["taggable_id", 52], ["taggable_type", "AssignableObject"]] 
=> [] 

답변

0

이 당신을 도울 수 있습니다 대한 답변을

Document.where((tag_list-["all-users", user.tag_list].flatten).size != tag_list.size) 
+0

감사합니다! tag_list가 Document 내부의 속성이 아니지만 더 많은 관계가 있다면 어떨까요? 나는 act_as_taggable을 사용하고 있으며 그것이 협회라고 믿습니다. – kibaekr

+0

음! 그것은 당신이 tag_list에 접근하는 방법의 문제 일뿐입니다. d.tag_list를 사용하여 문서 (d)의 tag_list에 액세스 할 수 있으면 다음을 수행 할 수 있습니다. Document.select {| d | (d.tag_list - [ "all-users", user.tag_list) .flatten) .size! = tag_list.size). – Mehran

+0

.select는 훌륭하게 작동했지만 배열로 변환하면 활성화 된 레코드가 아닙니다. 그래서 그 쿼리에 .includes (: child_association)를 추가 할 수 없습니까? 어떻게하면 수익을 활성 레코드로 만들 수 있습니까? – kibaekr