Rails - конструктор Stati c в модели? - PullRequest
0 голосов
/ 10 июля 2020

Я создаю Rails API, и меня интересует шаблон проектирования для моих конструкторов модели User.

Модель User имеет отношение has_one к модели AuthMehod, в которой хранятся ее данные аутентификации. У AuthMethod есть модели, которые наследуются от него, например PasswordAuth, FacebookAuth и т. Д.

Когда пользователь регистрируется, мне нужно, чтобы с ним был создан AuthMethod и был связан с ним, поэтому я создал stati c конструкторы в моей модели User:

user.rb

class User < ApplicationRecord
  has_one :auth_method, dependent: :destroy
  
  acts_as_paranoid
  validates_as_paranoid
  validates_uniqueness_of_without_deleted :email

  validates_presence_of :first_name, :last_name, :email

  def self.create_with_password_auth!(params)
    create_with_auth_method!(params, PasswordAuth.new(data: params[:password]))
  end

  private

  # Creates a new User and associates an AuthMethod
  # The AuthMethod parameter must be instantiated but not yet saved in the db
  def self.create_with_auth_method!(params, auth_method)
    user = User.create! user_params(params)
    auth_method.user = user
    auth_method.save!
    user
  end

  def self.user_params(params)
    params.slice(:first_name, :last_name, :email)
  end
end

Интересно, конструкторы stati c являются правильным решением для этого. Дело в том, что они удобны, потому что могут обрабатывать специфику c logi c для AuthMethod и связывать его с вновь созданным пользователем, но является ли это хорошей практикой? Я попытался найти способ добиться такого же поведения, например, с обратными вызовами модели, но мне сложно понять, как это сделать.

Спасибо за чтение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...