2017-05-14 7 views
0

그래서 acts_as_taggable이 제대로 작동합니다. 새 게시물을 만들 때 태그를 추가 할 수 있으며 게시물을 볼 때 모든 태그를 볼 수 있습니다. 내가하려는 일은 특정 태그에 대한 탐색 링크를 만드는 것입니다. 예를 들어 '영화'라는 탐색 링크가 필요하며 해당 링크를 클릭하면 내가 만든 모든 게시물에 '영화'태그가있는 게시물이 표시됩니다. 이것은 내 post_controller.rb 태그acts_as_taggable을 사용하여 같은 태그가있는 모든 게시물에 연결

acts_as_taggable # Alias for acts_as_taggable_on :tags 

extend FriendlyId 
friendly_id :title, use: :slugged 

belongs_to :author 


scope :most_recent, -> { order(published_at: :desc) } 
scope :published, -> { where(published: true) } 
scope :with_tag, -> (tag) { tagged_with(tag) if tag.present? } 

scope :list_for, -> (page, tag) do 
recent_paginated(page).with_tag(tag) 
end 

답변

1

당신은 탐색 버튼에 연결할 수있는 사용자 지정 경로를 만들 수 있습니다 다루는

def index 
    @posts = current_author.posts.most_recent 
end 

def show 
end 

def new 
    @post = current_author.posts.new 
end 

private 
    def set_post 
    @post = current_author.posts.friendly.find(params[:id]) 
    end 

    def post_params 
    params.require(:post).permit(:title, :body, :description, :banner_image_url, :tag_list) 
    end 
end 

end 

내 post.rb입니다.

<%= link_to "Movies, tagged_posts_path("Movies") %> 

posts_controller에서 맞춤 경로를위한 메소드를 만듭니다. 맞춤 경로는 'with_tag'범위를 사용하여 'Movies'태그가 지정된 게시물 만 사용자의 시야로 되돌릴 수 있습니다.

def tagged 
    @posts = Post.with_tag(params[:tag]) 
end 

라우트 파일에 새 맞춤 경로를 추가했는지 확인하십시오.

resources :posts do 
    collection do 
    get "/tagged/:tag", to: "posts#tagged", as: "tagged" 
    end 
end 
+0

고맙습니다. 분명히 올바른 방향으로 가고 있습니다. 또한 궁금해하는 Im은 이미 사용하려는 태그에 대한 별도의 페이지 및 링크 설정을 가지고 있습니다. 그래서 이미 내 영화 "TV"와 "음악"을 탐색 할 수 있습니다. 클릭하면 빈 페이지가됩니다. 새로운 경로와 새 뷰 템플릿을 만드는 대신에 특정 페이지의 태그를 호출하는 것이 더 쉬울까요? 예를 들어 Movies 아래에는 @ posts.tagged_with ("movies")라는 호출 태그가 있습니다. –

+0

내 코드에서 몇 가지를 조정했는데 이것이 완벽하게 해결되었습니다. 고맙습니다. –

+0

기존 인덱스 경로를 사용할 수 있으며 컨트롤러 메서드에서 태그 매개 변수가 있는지 확인합니다. link_to 메소드는 태그를 약간 다르게 전달해야합니다. link_to "Movies", posts_path, {tag : "Movies"}. 링크 할 여러 태그가 많은 경우 더 좋은 해결책이 될 수 있습니다. – margo