0

Я пытаюсь создать приложение для списка дел, где, когда пользователь подписывается через Devise, также создается одновременно заполненный список дел.Создайте список дел, когда пользователь создан в Devise

У меня установлены стандартные контроллеры Devise (подтверждения, omniauth_callbacks, пароль, регистрации, сеансы и разблокировки), а также контроллер to_do_list и контроллер list_item. Аналогично, у меня есть модели User, ToDoList и ListItem.

Пользователь будет принадлежать списку дел по умолчанию, а list_items будет принадлежать также to_do_list. (Позже, несколько пользователей должны принадлежать к тому же списку дел.) Где и как я могу поместить код, который создает один to_do_list и несколько list_items?

Спасибо!

+0

Вы случайно поставить это приложение на GitHub или где-нибудь? Я делаю что-то подобное для своей семьи, и я сталкиваюсь с проблемами, хотел бы увидеть ваш пример! –

+0

Да. Не возражаете, если я пришлю вам по электронной почте ссылку, а не разместил ее здесь? Это публичное репо, но связано с моей работой, поэтому я не хочу публиковать его. –

+0

Совсем нет! Пожалуйста, сделай! Мой адрес электронной почты на моем сайте (не хочу публиковать его здесь на всякий случай): cassidoo.co –

ответ

0

Нечто подобное будет работать:

user.rb

after_create :create_list 

def create_list 
    @list = ToDoList.create(user_id: self.id) 
    # add list items to @list 
end 

http://apidock.com/rails/ActiveRecord/Callbacks/after_create

after_create()

Вызывается после Base.save на новые объекты, которые не были сохранены ye t (записи не существует). Обратите внимание, что этот обратный вызов все еще завернут в транзакцию вокруг сохранения. Например, если вы вызываете внешний указатель в этот момент, он не увидит изменений в базе данных.

Update

to_do_list.rb

after_create :create_list 

def create_list_items 
    # let's say you have an array of list_items 
    items = ['item1', 'item2', 'item3', 'item4'] 
    items.each do |item| 
    ListItem.create(content: item, to_do_list_id: self.id) 
    end 
end 
+0

Спасибо, это очень полезно. Это сохраняет user_id в списке. Есть ли способ генерировать список, сохраняя идентификатор списка у пользователя? Мне нужно было бы вызвать User.update в методе create_list, верно? –

+0

Зависит от того, что входит в ваш список. Если это статический список list_items для каждого пользователя, вы можете добавить обратный вызов 'after_create' в' ToDoList.rb', который добавит ваши элементы списка в список. См. Обновление. – rmagnum2002

0

Логику создания (и остальную часть CRUD) следует поместить в контроллер представления, которое вы используете для отображения списка.

Также я думаю, что вы можете иметь это в обратном направлении, список todo должен принадлежать пользователю. Так что если вы должны были найти список, вы можете найти его с помощью пользователя -> список

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