Автоматически создавать связанную запись после создания родительской записи
Я создаю приложение Project, и мне нужно автоматически создать 1 участника при создании записи проекта.
My model
class Project < ActiveRecord::Base
has_many :participants, dependent: :destroy, inverse_of: :project
after_create :build_a_role
private
def build_a_role
self.participant.create!(user_id: current_user.id, level: 1, participant_cat: @role.id, added_by: current_user.id)
end
end
Когда я пытаюсь это сделать, я получаю эту ошибку:
undefined method `participant' for #<Project:0x007fb402707250>
1 ответ
Решение
У вас есть опечатка в вашем коде.
Следующие:
self.participant.create
должно быть:
self.participants.create
Потому что модель has_many :participants
не has_one :participant
Я также вижу, что вы используете current_user
а также @role
в твоей модели. Если вы ожидаете, что контроллер отправит их, то этого не произойдет. Этот помощник и переменная не будут доступны в модели и приведут к падению вашего метода даже после исправления вышеупомянутой опечатки.
Если ваш проект как-то хранит пользователя и роль, я советую вам взять self
Объект для создания вашего участника.