2011-12-09 2 views
1

나는 레일즈 블로그가 꽤 멋지게 나옵니다. 그러나 태그가 지정된 기사를 자신의 페이지에 표시 할 수 없습니다 (예를 들어, 해당 링크를 클릭하면 Arts & Entertainment라는 태그가 지정된 기사 만 표시됩니다).태그로 게시물 표시 - Ruby on Rails 블로그

내 스캐 폴드 모델에 태그가있는 열이 있습니다. 그것은 문자열을 필요로합니다. 그래서

1) 특정 태그에만 액세스하려면 어떻게해야합니까? 나는 다음과 같은 것을 시도했다 :

def self.sports 
    find(:all, :tags => 'gainmuscle') 
end 

를 사용할 수 없다.

2) 뷰에 표시하려면 어떻게해야합니까?

도움이 될 것입니다. 여기 tagged

def self.tagged_with 
    @articles = Article.tagged(params[:tag]).paginate(default_paginate_options) 
end 

namedscope입니다 :

답변

1

당신은 아마 다음과 유사한 컨트롤러 뭔가 내부 방법을 정의 할 수 있습니다. 당신은 그것을 무시할 수 있지만 행동은 :param으로 선택된 태그로 태그가 붙은 모든 기사를 생성합니다. 태그는이 경우 모델 조항의 속성입니다. 컨트롤러에서 다음

class YourModel < ActiveRecord::Base 

    scope :by_tag, lambda{|tag| where(:tag => tag)} 

    ... 
end 

그리고 :

+0

그렇다면 뷰에 기사를 표시하려면 어떻게해야합니까 (예 : 스포츠 기사보기, 모든보기 스포츠 (사용자가 입력 한 문자열)). – TopChef

+0

@TopChef : 사용자 입력 받기 using : params 그리고 나서 컨트롤러에 다음과 비슷한 메소드를 작성하여 사용자가 지정한 태그에 태그 된 모든 기사를 가져옵니다. –

1

1) 여기서 모델의 범위를 사용할 수

@collection = YourModel.by_tag("gainmuscle") 

2) 내가 가장 좋은 방법은 생성하는 HTML과 부분입니다 말할 것

render :partial => 'post', :collection => @collection 

이 (당신은 여기 파셜 사용량을 확인할 수 있습니다 : 1 개 싱글 게시물에 대한 코드, 다음 이런 식으로 렌더링를)

+1

OP가 여전히 레일 2.x에 있다고 생각합니다. 'scope'메소드가 도입되었습니다. 3.0에서 나는 (전에 이름이 찍힌 스코프). – tmaximini

0

또 다른 접근 방식을 언급합니다. 이 정확한 목적을 다룰 수있는 보석이 꽤 있습니다. This이 흥미로울 수 있으며 개인적으로 acts_as_taggable_on에 투표 할 수 있습니다. 이렇게하면 나중에 편리하게 사용할 수있는 많은 옵션이 제공됩니다.