2011-03-03 5 views
1

그래서 저는 레일을 배우려고 노력 중이며 아직 속임수를 쓰고 싶지 않습니다.레일스는 acts_as_taggable을 사용하지 않고 특정 태그가있는 모든 게시물을 찾습니다.

포스트 모델 :

class Post < ActiveRecord::Base 
    has_many :features 
    has_many :tags, :through => :features 
end 

태그 모델 :

class Feature < ActiveRecord::Base 
    belongs_to :tag 
    belongs_to :post 
end 

은 이미 방법을 알고

class Tag < ActiveRecord::Base 
    has_many :features 
    has_many :posts, :through => :features 
end 

테이블 조인 수행하여 태그와 연관 게시물 : Post.find_by_id (1) < < Tag.first 이제

, 나는 특정 태그 게시물 검색에 갇혔어요. "수영", "실행 중", "돈 벌기" 중 하나 이상을 포함하는 모든 게시물을 검색하려면 어떻게합니까?

Post1 태그를 포함 : "자전거 타기", "암벽 등반", "수영"

Post2 태그 포함 : "개구리", "물고기"

포스트 3 태그를 포함을 "돈을 버는", "수영 ","자전거 타기 ","사랑 "

Post4 태그를 포함 :"수영 "

내가 사용자의 이익을 가장 먼저 표시하기 위해 일치하는 게시물을합니다.

예 : 사용자는이 순서로 게시물 목록을 볼 수 있습니다. post3, post1, post4. 이것이 너무 어렵다면 정확한 태그가있는 모든 게시물을 찾는 방법으로 충분할 것입니다. 당신은

@tag.posts 

당신이 has_and_belongs_to_many 관계를 사용하지 않은 어떤 이유가 있습니까을 할 수 있어야

답변

0

?

UPDATE : 귀하의 코멘트 당

:

tag_ids = [1, 2, 3] # aka the IDs for tags ["swimming", "running", "making money"] 
matches = {} 
@posts.each do |post| 
    count = 0; 
    post.tags.each do |tag| 
    count += 1 if tag_ids.include? tag.id 
    end 
    matches[count] ||= [] 
    matches[count] << post 
end 
아마 조금을 최적화 할 수 있지만, matches 다음 경기의 수에 따라 키에서 요청 된 태그를 일치하는 모든 게시물을 포함

. 이것은 또한 컨트롤러 대신 Posts 모델의 클래스 메서드에 포함되어야합니다.

+0

흠 작동하지만 대부분의 태그와 일치하는 게시물을 표시하려면 어떻게해야합니까? 이 하나의 태그가있는 모든 게시물과 일치합니다. – Mason

+0

이것은'PostsController' 또는'TagsController'에 있습니까? –

+0

난 그냥 레일 콘솔 atm을 사용하고 있습니다. 하지만 앞으로 PostsController에 들어갈 것입니다. 또한 has_and_belongs_to_many를 사용하지 않은 진짜 이유가 없습니다. – Mason