У меня есть ресурс ClinicalCase, в котором есть вопросы, имеющие много вопросов (вложенный ресурс). Идея состоит в том, чтобы постоянно показывать случай и видеть один вопрос за раз. Моя проблема в том, что, если в деле есть 5 вопросов, приложение показывает только 4. Он покажет один и тот же вопрос для первого индекса массива и последнего индекса массива, и все между ними будет одинаковым.
Например, если в случае 1 есть вопросы «foo», «bar» и «baz», «foo» и «bar» будут отображаться только с «foo» в начале и конце. Я понятия не имею, почему это происходит.
Я использую will_paginate для помощи в разбивке на страницы, так как каждый пользователь должен видеть один случай за раз и один вопрос за раз, который относится к случаю.
Вот мой код (работает нормально, за исключением того, что первый и последний вопрос по делу отображаются точно так же)
контроллер
def tagged
@cases = ClinicalCase.with_tag(params[:tag]).paginate(:page => params[:case], :per_page => 1)
end
модель
class ClinicalCase < ApplicationRecord
belongs_to :user
has_many :questions, dependent: :destroy, inverse_of: :clinical_case
has_many :answers
accepts_nested_attributes_for :questions, allow_destroy: true, reject_if: :all_blank
acts_as_taggable
scope :with_tag, -> (tag) { tagged_with(tag) if tag.present? }
def paginated_questions(page, per_page = 1)
questions.paginate(page: page, per_page: per_page)
end
просмотр части 1: tagged.html.erb
<% @cases.each do |clin_case| %>
<%= render "clinical_cases/question", clin_case: clin_case, questions: clin_case.questions %>
<%= will_paginate @cases, :param_name => 'case', :previous_label => 'Previous Case', :next_label => 'Next Case', :page_links => false %><br>
<% end %>
просмотр части 2: _question.html.erb
<% questions = clin_case.paginated_questions(params[:page]) %>
<% questions.each do |question| %>
<%= question.title %>
<% question.answers.shuffle.each do |x| %>
<% if x.correct? %>
<%= x.choice %>
<% else %>
<%= x.choice %>
<% end %>
<% end %>
<%= will_paginate questions, :previous_label => 'Prev. Ques.', :next_label => 'Next Question', :page_links => false %>
<% end %>