2013-04-12 3 views
0

У меня есть модель, Lesson, которая has_many :lesson_objectives. Каждый Lesson может иметь неограниченное количество LessonObjectives -. Который где часть проблемы приходит вРельсы: Динамически Генерирующие элементы формы для отношения has_many

Я планирую интегрировать контроллеры/представления для этих двух моделей вместе - такие, что всякий раз, когда кто-то хочет создать Lesson они также должны предоставить для этого все LessonObjective. Я хотел бы получить решение, в котором пользователю будут представлены, возможно, два поля по умолчанию, например «Objecive 1» и «Objective 2», а затем любые последующие поля будут добавляться «на лету», как пользователь вводит. Когда пользователь заполняет «Objective n», автоматически появляется поле «Objective n + 1».

Однако я не уверен в двух вещах.

  • Лучший способ добавить это поведение в представления. Это, вероятно, потребует много jQuery, и я не уверен в лучших практиках. Например, что, если пользователь удаляет «Objecive 5», а затем «Objective 6» нужно перетасовать, чтобы заполнить «Objective 5»?

  • Как можно настроить поля формы (имена, идентификаторы), чтобы Rails понимал поведение и сохранял данные без нарушения правил рельсов и сохранения RESTful и DRY.

Если драгоценный камень может помочь, не стесняйтесь предлагать его! Я использовал SimpleForm и несколько других.

Спасибо!

ответ

1

Вы правы, что вам нужно углубиться в JQuery, чтобы получить автоматическое создание новых полей ввода LessonObjective после ввода значения по умолчанию lessonObjective2.

Например, если пользователь удаляет «Objecive 5», а затем «Objective 6» необходимо перетасовать, чтобы заполнить «Objective 5»?

Лучшие практики диктуют, что не будет включать JQuery, но будет включать PARTIAL! и AJAX.

Это ключ, независимо от того, что создает отображение всех текущих объектов lessonObjectives, в частичном. Частичное будет отвечать за нумерацию целей в последовательности.

Затем, если у вас есть ссылка «удалить» (remote => true), и нажмите действие контроллера, которое удалит lessonObjective, этот контроллер будет отображать javascript, который заставляет частичное повторное отображение, на этот раз с новым список всех lessonObjectives (минус тот, который вы только что удалили).

simple_form в порядке, простые старые рельсы, созданные помощниками, будут работать нормально. Ничто из того, что вы намереваетесь, влияет на ваш выбор технологии форм.

Как можно настроить поля формы (имена, идентификаторы), чтобы Rails понимало поведение и сохраняло данные без нарушения правил рельсов и сохранения RESTful и DRY.

Просто помните основы того, как рельсы Помощники имя входа:

Если ваша форма Foo, и вход в таком виде находится бар, это имя 'Foo [бар]

Вы можете делать все, что хотите, с помощью простых старых рельсов из коробки. Самая сложная часть будет jquery, чтобы добавить новые поля ввода с соответствующими именами, чтобы они разместили сообщение правильно.

+0

Спасибо за ваш ответ, он многое очистил для меня. Будет ли «Урок [LessonObjective] [1]», «Lesson [LessonObjective] [2]» - это соглашение об именовании формы для частичных полей - чтобы рельсы понимали взаимосвязь? – Kieran

+0

просто убедитесь, что целочисленные значения являются фактическими значениями id для объектов LessonObjective, последовательность (1,2,3 ..) является искусственной и создается представлением. – RadBrad

Смежные вопросы