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
所以我 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