2017-05-14 53 views
0

因此,我有acts_as_taggable正常工作。我可以在創建新帖子時添加標籤,並且在查看帖子時可以看到所有標籤。我想要做的是爲某些標籤創建一個導航鏈接。例如,我想要一個名爲「電影」的導航鏈接,當我點擊該鏈接時,我想要創建具有「電影」標籤的所有帖子。這是我的post_controller.rb使用acts_as_taggable鏈接到具有相同標記的所有帖子

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與標籤

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

您可以創建的導航按鈕可以鏈接到一個定製的路由協議。

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

在posts_controller中,爲自定義路由創建一個方法。自定義路線可以使用'with_tag'範圍將僅標記爲'電影'的帖子返回給您的視圖。

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(「電影」)。 –

+0

在我的代碼上調整了一些東西,這完全解決了。謝謝。 –

+0

您可以使用現有的索引路由並在控制器方法中檢查是否存在標籤參數。 link_to方法必須稍微不同地傳遞標籤,例如link_to「電影」,posts_path,{tag:「電影」}。如果你有很多不同的標籤鏈接到一個更好的解決方案。 – margo

相關問題