Puma, похоже, не выполняет текущую кодовую базу для разработки user / registrations_controller.rb - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть Ctrl + C мой сервер Rails и перезагрузка компьютера, но Puma продолжает использовать старую версию кода.

Redirected to http://printrdwn.com:3000/
   (0.3ms)  BEGIN
  ↳ app/controllers/users/registrations_controller.rb:17
  Role Load (1.2ms)  SELECT  "roles".* FROM "roles" WHERE "roles"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ app/controllers/users/registrations_controller.rb:17
   (0.3ms)  ROLLBACK
  ↳ app/controllers/users/registrations_controller.rb:17
   (0.2ms)  BEGIN

В строке 17 Puma запрашивает ролевую модель. В моем коде нет ссылки на ролевую модель. Вот файл users / registrations_controller.rb, который наследует devise:

class Users::RegistrationsController < Devise::RegistrationsController
  def create
    super

    @team = Team.new(name: "Personal")
    TeamMember.create(user_id: current_user, team_id: @team.id, role_id: 1)
    @team.save
  end
end

В предыдущей версии user / registrations_controller я упоминал роль, чтобы выбрать роль администратора, но в этом не было необходимости. Я пытался заставить пользователей / registrations_controller создать команду и current_user в качестве TeamMember, но потом я понял, что мой код никогда не менялся с моими исправлениями.

1 Ответ

0 голосов
/ 29 апреля 2020

Вы хотите передать блок в super, чтобы команда создавалась только в том случае, если пользователь действительно сохранен:

class Users::RegistrationsController < Devise::RegistrationsController
  def create
    super do |user|
      @team = Team.new(name: "Personal")
      @team.members.new(user: user, role_id: 1)
      @team.save
     end
  end
end

А сборка записи из ассоциации гарантирует, что Rails действительно сохранит обе записи в той же транзакции. Передача идентификаторов явно является запахом кода, и в этом случае на самом деле ошибка, поскольку @team.id равна нулю, поскольку запись не была сохранена.

...