仅使用下一页按钮实现分页功能
嘿,我来帮你搞定这个仅带「下一页」按钮的单条记录分页功能!先梳理下你现有代码里的小问题,再给你一套完整的可运行方案:
第一步:修正控制器逻辑
你现有代码里@evaluation = Evaluation.pluck(:content).last这里有个小问题:pluck(:content)返回的是字符串数组,取last之后是单个字符串,没法用each遍历哦。我给你调整成符合需求的分页逻辑,核心是判断「是否还有下一页」,只在有后续记录时显示按钮:
class QuestionsController < ApplicationController before_action :set_page, only: [:view] QUESTIONS_PER_PAGE = 1 def view # 先获取所有需要展示的问题集合,这里按ID排序,你可以改成自己需要的查询/排序规则 @questions = Question.all.order(:id) # 取出当前页的单条记录 @current_question = @questions.offset((@page - 1) * QUESTIONS_PER_PAGE).first # 关键:判断是否存在下一页 @has_next_page = @questions.offset(@page * QUESTIONS_PER_PAGE).exists? end private def set_page # 确保page参数是合法的正整数,默认显示第1页 @page = params[:page].present? ? params[:page].to_i : 1 @page = 1 if @page < 1 end end
如果你的问题来源是Evaluation的content字段拆分出来的多条内容(比如content里用换行/逗号分隔了多个问题),那可以把控制器逻辑改成这样:
def view # 取最后一条Evaluation的content并拆分成问题数组 @evaluation = Evaluation.last questions_list = @evaluation.content.split("\n") # 这里用换行拆分,你可以换成自己的分隔符 # 转成方便视图调用的结构(模拟Question对象) @questions = questions_list.map { |q_content| OpenStruct.new(content: q_content) } # 当前页的问题 @current_question = @questions[@page - 1] # 判断是否有下一页:当前页码小于总问题数 @has_next_page = @page < @questions.length end
第二步:视图层实现「下一页」按钮
在对应的视图模板(比如app/views/questions/view.html.erb)里,先展示当前页的单条记录,再根据@has_next_page的值决定是否显示按钮:
<!-- 展示当前问题 --> <div class="question-card"> <% if @current_question %> <p><%= @current_question.content %></p> <!-- 这里可以添加问题的其他字段,比如创建时间、选项等 --> <% else %> <p>已经看完所有问题啦 🎉</p> <% end %> </div> <!-- 仅在有下一页时显示按钮 --> <% if @has_next_page %> <%= link_to '下一页', view_questions_path(page: @page + 1), class: "btn btn-primary" %> <% end %>
这样就能实现你要的效果:每页只显示一条记录,只有「下一页」按钮,没有上一页、页码导航这些多余元素~
内容的提问来源于stack exchange,提问作者amy
相关产品推荐
相关产品推荐

