Link 所有具有相同标签的帖子,使用 acts_as_taggable

Link to all posts with same tag, using acts_as_taggable

所以我 acts_as_taggable 正常工作。我可以在创建新的 post 时添加标签,并且在查看 post 时可以看到所有标签。我想做的是为某些标签创建导航 link。例如,我想要一个显示 "Movies" 的导航 link,当我单击 link 时,我想要我创建的所有带有标签 "Movies" 的 post ] 以显示。这是我的 post_controller.rb

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

您可以创建导航按钮可以 link 到达的自定义路线。

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

在posts_controller中,为自定义路由创建一个方法。自定义路由可以使用 'with_tag' 范围来 return 只有标记为 '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