gpt4 book ai didi

ruby-on-rails - Rails 5 上一篇或下一篇文章仅来自特定标签

转载 作者:数据小太阳 更新时间:2023-10-29 06:45:55 26 4
gpt4 key购买 nike

我有一个名为 posts 的资源,其中有很多。但是,每个帖子可以有多个标签。我希望用户只能从所选标签转到上一篇和下一篇文章。我让它适用于上一个下一个数据库中的所有帖子,但是当我单击一个标签并显示所有标签时,上一个/下一个不符合标签是什么。

如果我访问与 routes.rb 中定义的代码关联的 url,get 'tags/:tag', to: 'posts#index', as: :tag,它会列出索引中的所有标签。我不想要这个,我希望用户能够单击上一个或下一个,并且只能在与标签关联的帖子上执行此操作。

注意:我使用的是 friendly_id gem

controllers/posts_controller.rb

  def index
@posts = Post.all

if params[:tag]
@posts = Post.tagged_with(params[:tag])
else
@posts = Post.all
end

end

models/post.rb

# tags 
acts_as_taggable # Alias for acts_as_taggable_on :tags

def next
Post.where("id > ?", id).order(id: :asc).limit(1).first
end

def prev
Post.where("id < ?", id).order(id: :desc).limit(1).first
end

show.html.erb

<%= link_to "← Previous Question", @post.prev, :class => 'button previous-question' %>

<%= link_to "Next Question →", @post.next, :class => 'button next-question' %>

routes.rb

 # TAGS
get 'tags/:tag', to: 'posts#index', as: :tag

最佳答案

我认为您将不得不传递那个 tag 参数(尽管您可能应该将其作为辅助方法)

模型/post.rb

def next tag
Post.where("id > ?", id).tagged_with(tag).order(id: :asc).limit(1).first
end

def prev tag
Post.where("id < ?", id).tagged_with(tag).order(id: :desc).limit(1).first
end

显示

<%= link_to "← Previous Question", post_path(@post.prev(current_tag).id, tag: current_tag), :class => 'button previous-question' %>

<%= link_to "Next Question →", post_path(@post.next(current_tag).id, tag: current_tag), :class => 'button next-question' %>

Controller /posts_controller.rb

class PostsController < ApplicationController
helper_method :current_tag

#def show
#def index

private

def current_tag
params[:tag]
end
end

关于ruby-on-rails - Rails 5 上一篇或下一篇文章仅来自特定标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46730201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com