Я пытаюсь узнать, как написать класс обслуживания в моем приложении rails 5.Rails 5: вызов класса сервиса - отношение сопоставления
Когда пользователь регистрируется с помощью устройства, я пытаюсь включить класс обслуживания, который создает модели, связанные с учетной записью пользователя, при создании учетной записи пользователя.
В мой контроллер регистраций завещать, у меня есть:
class Users::RegistrationsController < Devise::RegistrationsController
before_action :configure_permitted_parameters, if: :devise_controller?
def create
super do |user|
if user.persisted?
User::CompleteRegistration.call(user: user)
end
end
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email])
devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :email, ])
end
private
end
В моем приложении/услуги/папки пользователя, у меня есть файл с именем: complete_registration.rb:
class User::CompleteRegistration #< ActiveRecord::Base
def self.call(user: u)
new(user: user).call
end
def initialize(user: u)
self.user = user
end
def call
Profile::SetupService.call(user: user)
Setting::SetupService.call(user: user)
User::OrganisationMapperService.new(user: user).call
end
# def join_an_organisation
# render "organisation_requests/new"
# end
private
attr_accessor :user
end
Когда я пытаюсь сохраните это, а затем зарегистрируйтесь как пользователь, я могу увидеть сообщение об ошибке:
NameError - uninitialized constant User::CompleteRegistrations:
Отмечу, что это ха s pluralized слово «регистрация». Я не знаю, связано ли это с проблемой. Я попытался сохранить файл как множественное число и переименовал класс как множественное число, но это не сработало.
Фактическая ошибка визуализации говорит:
PG::UndefinedTable at /users
ERROR: relation "complete_registration_services" does not exist
LINE 8: WHERE a.attrelid = '"complete_registration_se...
Я не могу расширить сообщение, чтобы получить более подробную информацию, но нет никакого отношения можно найти, потому что оно не активную запись таблицы, которые я пытаюсь позвонить ,
Я также попытался добавить обратный вызов для моей модели пользователя в качестве альтернативного решения:
class User < ApplicationRecord
after_update :after_confirmation_setup
def after_confirmation_setup
return unless !self.confirmed_at.blank?
User::CompleteRegistration.call(user: @user)
end
Но это не работает либо.
Может ли кто-нибудь увидеть, как настроить приложение для вызова класса обслуживания при создании пользователя (из регистрационного контроллера или любого другого метода)?
Большое спасибо Джону. Это действительно полезно. Я определенно дам твою жемчужину попробовать. Еще раз спасибо. – Mel