2011-01-23 7 views
0

안녕하세요과 같은 코드가 있습니다레일 : 범위 필터 질문

query = Post.order("published_at desc") 
query = query.where("location_id = ?", params[:location_id]) unless params[:location_id].blank? 
query = query.where("category_id = ?", params[:category_id]) unless params[:category_id].blank? 
@posts = query.all 

는 기본적으로 게시물이 location_id와 CATEGORY_ID 있습니다. 그래서 지금은 그것들을 기초로 필터링 할 수 있습니다. 그러나 게시물에는 has_many 태그도 있습니다. 예를 들어 게시물에 자바 태그와 CSS 태그가있을 수 있습니다.

자바 태그만으로 모든 게시물을 필터링하고 싶을 수도 있습니다. 또는 java 및 css 태그가있는 게시물. 어떻게해야합니까?

답변

1

태그 모델에 대해 알지 못해도 작동 예제를 제공하는 것이 조금 어렵습니다. 그러나 각 태그가 하나의 Post에 속하며 태그에 이름 필드가있는 has_many 연관을 가정 할 때 예제가 있습니다. 당신은 태그 이름에 기반 필터 귀하의 게시물 모델의 범위를 정의 할 수 있습니다 :

class Post < ActiveRecord::Base 
    scope :with_tags, lambda {|tags| joins(:tags).where("tags.name IN (?)", tags)} 
end 

다음과 같이 사용 : 나는 코드 I와 함께 사용할 수 있도록

tags = ["java"] 
@posts.with_tags(tags) 

tags = ["java", "css"] 
@posts.with_tags(tags) 
+0

당신이 그것을 수정할 수 있습니다 위에 있습니까? – SuperString

+0

코드와 함께 작동해야하지만 테스트하지 않았습니다. 그것은 당신에게 오류를주고 있습니까? 당신의 코드에서'query.all'을'query.with_tags ([array of tags])'로 대체하십시오. –

+0

activerecord에 대해 정의되지 않은 메서드 – SuperString