Автоматически создавать связанную запись после создания родительской записи

Я создаю приложение 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 Объект для создания вашего участника.

Другие вопросы по тегам