Rails嵌套资源显示两次。.一次在开始,一次在结束

时间:2018-11-08 21:25:00

标签: ruby-on-rails

我有一个称为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 %>

1 个答案:

答案 0 :(得分:0)

我知道了,我不确定为什么它开始起作用,但是确实起作用。

<% @questions = clin_case.questions.order("created_at ASC").paginate(:page => params[:question], :per_page => 1) %>

<%= render @questions %>

我使用局部变量来获取关联,并在ASC中添加了order方法,这使它起作用。