2017-01-11 2 views
1

Я пишу приложение todo, которое отслеживает часто повторяющиеся задачи. У меня есть модель CheckList, которая has_manyTask s внутри. Пользователи могут создать новый CheckList и добавить к нему задачу, как обычно в Rails.Rails - создать экземпляр модели, основанной на другой модели

Я бы хотел, чтобы пользователи также могли создать шаблон контрольного списка (который будет иметь свою собственную модель шаблона). Этот шаблон был бы представлением (я думаю в JSON) CheckList и его Task s, и я хотел бы иметь возможность создать новый CheckList и заполнить его Task s от него. Таким образом, они могут просто воссоздать один и тот же контрольный список в разное время.

Есть ли простой способ достичь этого?

Есть ли способ создать метод create_list_from_template где-нибудь, который будет анализировать шаблон и создавать CheckList и задачи соответственно?

Я все об этом не так? Любые предложения оценили ...

EDIT

Я буду использовать NestedAttributes создавать задачи непосредственно из CheckList и это прекрасно. Я специально спрашиваю, как создать контрольный список из шаблона.

Как я могу назвать и передать создание этого нового CheckList на основе данных JSON, содержащихся в шаблоне?

Есть ли способ создать новое действие на CheckListsController, которому я мог бы передавать данные шаблона? Как действие new_checklist_from_template или что-то в этом роде?

ответ

2

Вы должны указать галочку NestedAttributes. Это позволит вам создать объект parent и n number дочерних объектов за один раз. В вашем случае parent является CheckList и children являются tasks.

Проверьте следующую ссылку

http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

+0

Это является удивительным, спасибо. Но как я могу использовать это с помощью контроллера/модели шаблона? Должен ли я вызвать функцию, которая создает новый контрольный список из Template Controller? Какое действие должно быть? – Alex

+0

Есть много примеров, показывающих, как использовать «Вложенные атрибуты» в Интернете. Вот простейший пример. https://coderwall.com/p/qwx3qa/nested-form-and-rails-4 – fossil

+0

Чтобы ответить на ваш вопрос, вам нужно создать новый «Контрольный список» и передать параметры для 'задач' как' tasks_attributes' – fossil