我有一个称为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部分:tag.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 %>
答案 0 :(得分:0)
我知道了,我不确定为什么它开始起作用,但是确实起作用。
<% @questions = clin_case.questions.order("created_at ASC").paginate(:page => params[:question], :per_page => 1) %>
<%= render @questions %>
我使用局部变量来获取关联,并在ASC中添加了order方法,这使它起作用。