2017-05-14 4 views
0

私はacts_as_taggableを正しく動作させました。私は新しい投稿を作成するときにタグを追加することができ、投稿を見るときにすべてのタグを見ることができます。私がしようとしているのは、特定のタグのナビゲーションリンクを作成することです。たとえば、「映画」と言うナビゲーションリンクが必要です。リンクをクリックすると、作成したすべての投稿にタグ「映画」が表示されます。これはあなたがナビゲーションボタンがリンクすることができますカスタムルートを作成することができますタグ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私post_controller.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

ありがとう、これは間違いなく正しい方向に進んでいます。また、私は、私が使用したいタグのための私の別のページとリンクのセットアップを既に持っています。だから私はすでにあなたがそれらをクリックすると、 "映画"、 "テレビ"と "音楽"、私はちょうど空白のページです。新しいルートテンプレートと新しいビューテンプレートを作成するのではなく、その特定のページのタグを呼び出すほうが簡単でしょうか。たとえば、映画の下には@ posts.tagged_with( "movies")というコールタグがあります。 –

+0

私のコードでいくつかのことを微調整して、これは完璧に機能しました。ありがとうございました。 –

+0

既存のインデックスルートを使用し、コントローラメソッドでタグパラメータの有無を確認できます。 link_toメソッドは、タグをわずかに異なる方法で渡す必要があります。 link_to "movies"、posts_path、{tag: "Movies"}。リンクするタグがたくさんある場合は、より良い解決策になるかもしれません。 – margo

関連する問題