Вложенный ресурс Rails появляется дважды .. один раз в начале и один раз в конце - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть ресурс 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 %>

1 Ответ

0 голосов
/ 09 ноября 2018

Я понял это, и я не уверен, почему это начало работать, но это сделало.

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

<%= render @questions %>

Я использовал локальную переменную для получения ассоциации и добавил метод заказа в ASC, и это заставило его работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...