0

У меня есть большой психологический тест на 251 вопрос. Каждый пользователь может выполнить этот тест много раз. Поэтому я создал Сводную модель для представления каждого завершения. В каждом сводке есть много ответов. Для каждого Резюме Я создал форму, которая представляет коллекцию ответов, используя тонкий Templater и simple_form перл:Предел simple_form_for номера связанных записей в Ruby on Rails

= simple_form_for(@summary) do |f| 
    = f.simple_fields_for :answers do |a| 
    .question 
     = a.input :question_id, as: :hidden 
     div= a.object.question.title 
     - if a.object.question.kind_of? SpiritualityQuestion 
     ol class="sortable" 
      - a.object.question.sortable_variants.each do |sortable_variant| 
      = content_tag_for :li, sortable_variant 
       = sortable_variant.title 
     = a.input :text_data, as: :hidden, input_html: { class: 'sortable_data' } 
     - elsif a.object.question.kind_of? MultilineQuestion 
     div Time remaining: <span class="time">60</span> s. 
     = button_tag 'Start', type: 'button', class: 'start_button btn btn-primary' 
     = a.input :text_data, label: false, input_html: { class: 'span8 timed_text', cols: '60', rows: '20', disabled: true } 
     - else 
     = a.association :variant, collection: a.object.question.variants, as: :radio, label: false 
    br 
    = f.input :user_id, as: :hidden 
    = f.input :psy_test_id, as: :hidden 

    .actions 
    = f.button :submit, value: 'Save', class: 'btn btn-large btn-success' 

И я относил действия контроллера:

@summary = Summary.where(completed: false, user: current_user, psy_test: PsyTest.first) 
        .includes(:answers => { :question => :variants }) 
        .first_or_initialize 
@summary.build_answers if @summary.new_record? 

Summary.build_answers:

def build_answers 
    # Creating answers for questions 
    psy_test.questions.includes(:variants).each do |q| 
    answers.new(question: q) 
    end 
end 

Теперь я пытаюсь сделать тест разбитым на страницы, потому что он очень большой, и форма создается очень медленно. Поэтому я хочу добавить ограничение и смещение ответов. Что-то вроде этого:

= f.simple_fields_for answers.limit(@limit).offset(@offset) do |a| 

Как это можно сделать?

+0

Не уверен, если это то, что вы хотите, но вы можете попробовать 'wicked' камень , [Здесь] (http://railscasts.com/episodes/346-wizard-forms-with-wicked?view=asciicast) ASCII. –

+0

злой драгоценный камень - это заполнение одного объекта множеством различных атрибутов шаг за шагом. Но мне нужно заполнить много похожих объектов одной серии моделей партиями. –

ответ

2

Я посмотрел сделать field_for источник и нашел простой ответ, который я не смог находкой в ​​любом руководстве:

= f.simple_fields_for :answers, @summary.answers.limit(@limit).offset(@offset) do |a| 
Смежные вопросы