การแบ่งหน้าด้วยปุ่มถัดไปเท่านั้น

ฉันกำลังพยายามสร้างปุ่มถัดไปซึ่งควรแสดงเพียงระเบียนเดียวต่อหน้า ฉันรู้ว่าเราสามารถใช้การแบ่งหน้าได้ แต่ฉันอยากได้เพียงปุ่มถัดไปเท่านั้น ดังนั้นฉันจึงอ่านโพสต์ต่อไปนี้และนำไปปฏิบัติ: ตัวควบคุม คำถาม ของฉัน:

class QuestionsController < ApplicationController
  before_action :set_page, only: [:view]
  QUESTIONS_PER_PAGE = 1
  def view
    questions=[]
    @evaluation = Evaluation.pluck(:content).last
    @evaluation.each do |question|
      questions << question
    end
    @questions=Question.where(:content => questions).limit(QUESTIONS_PER_PAGE).offset(@page*QUESTIONS_PER_PAGE)
    #@questions=Question.where(:content => questions).paginate(page: params[:page],per_page: 1)
  end
  private
    def set_page
       @page = params[:page] || 0
    end

มุมมองของฉัน.html.erb ซึ่งให้ข้อผิดพลาด: ไม่มีการแปลงจำนวนเต็มเป็นสตริงโดยปริยาย

<h1>Self-Evaluation Exam</h1>

<table id="questions">
    <thead>
        <tr>
            <th>Content &nbsp; &nbsp; &nbsp;</th>
        </tr>
    </thead>
    <tbody>
        <% @questions.each do |question| %>
          <tr>
            <td><%= question.content %></td>
            <td><%= check_box_tag question.c1 %></td>
            <td><%= question.c1%></td>
            <td><%= check_box_tag question.c2 %></td>
            <td><%= question.c2%></td>
            <td><%= check_box_tag question.c3 %></td>
            <td><%= question.c3%></td>
            <td><%= check_box_tag question.c4 %></td>
            <td><%= question.c4%></td>
            <td><%= check_box_tag question.c5 %></td>
            <td><%= question.c5%></td>
          </tr>
        <% end %>
    </tbody>
</table>
<div id = "nav">
    <%= button_to 'Next',questions_path(page: @page + 1) %># this line gives error: no implicit conversion of Integer into String
</div>
<li><%= link_to 'Personal Evaluation',instructions_student_path %></li>

แบ่งหน้าโดยไม่มีอัญมณี ถัดไป ก่อนหน้า ปุ่มสำหรับ Name.order(:id).limit(10).offset(0) มันแสดงหน้าแรก แต่เมื่อฉันคลิกที่ปุ่ม ฉันได้รับข้อผิดพลาด PS: ปุ่มถัดไปควรเปลี่ยนเป็นส่ง เมื่อมันเป็นบันทึกสุดท้าย ขอบคุณ


person amy    schedule 12.04.2018    source แหล่งที่มา


คำตอบ (2)


มันค่อนข้างง่ายลองทำสิ่งต่อไปนี้

QUESTIONS_PER_PAGE = 1
@questions = Question.where(content: questions).offset(QUESTIONS_PER_PAGE * @page).limit(QUESTIONS_PER_PAGE)

private
def set_page
   @page = (params[:page] || 0).to_i
end

เปลี่ยนเป็น view.html.erb ของคุณด้วย next >> และ << previous

<div id="nav">
    <nav>
        <ul class="pager">
            <li class="previous <%= @page == 0 ? 'disabled' : '' %>">
                <%= link_to_if page > 0, "&larr; Previous".html_safe, questions_path(page: @page - 1) %>
            </li>
            <li class="next">
                <%= link_to "Next &rarr;".html_safe, questions_path(page: @page + 1) %>
            </li>
        </ul>
    </nav>
</div>

ดังนั้น controller ของคุณจึงมีหน้าตาแบบนี้

class QuestionsController < ApplicationController
    before_action :set_page, only: [:view]
    QUESTIONS_PER_PAGE = 1
    def view
        questions=[]
        @evaluation = Evaluation.pluck(:content).last
        @evaluation.each do |question|
          questions << question
        end
        @questions = Question.where(content: questions).offset(QUESTIONS_PER_PAGE * @page).limit(QUESTIONS_PER_PAGE)
    end

    private
    def set_page
       @page = (params[:page] || 0).to_i
    end
end

หากคุณต้องการเพียงปุ่มถัดไปในมุมมองของคุณให้ใช้เท่านั้น

<%= link_to "Next &rarr;".html_safe, questions_path(page: @page + 1) %>

มีสภาพ

<% if @page == @questions.count %>
    <button>Finished</button>
<% else %>
    <%= link_to "Next &rarr;".html_safe, questions_path(page: @page + 1) %>
<% end %>
person fool-dev    schedule 12.04.2018
comment
ยินดี - person fool-dev; 12.04.2018

ข้อผิดพลาดกำลังแจ้งให้คุณทราบว่าตัวสร้าง URL ล้มเหลวเนื่องจากพยายามแปลงจำนวนเต็มเป็นสตริง นอกจากนี้ การเพิ่มค่าโดยทั่วไปจะเป็น +=

ฉันพนันได้เลยว่า params[:page] กำลังส่งคืนสตริงแทนที่จะเป็นจำนวนเต็ม จะเกิดอะไรขึ้นถ้าคุณทำ @page.to_i += 1? อย่างน้อยบางสิ่งบางอย่างในบรรทัดเหล่านั้นจะทำให้คุณผ่านข้อผิดพลาดเริ่มแรกนี้ได้

person John Athayde    schedule 12.04.2018
comment
ฉันเปลี่ยนมันในคอนโทรลเลอร์เป็น params[:page].to_i อย่างไรก็ตาม ตอนนี้ฉันมีปุ่มถัดไปตลอดไป ฉันต้องการหยุดเมื่อฉันอยู่ในบันทึกล่าสุดและควรส่งปุ่มแทน คุณช่วยในเรื่องนั้นได้ไหม? - person amy; 12.04.2018