Переопределение параметров устройства - PullRequest
0 голосов
/ 14 января 2019

Я создаю приложение, которое принимает администратора и компанию в одной форме и соединяет их. Часть соединения настроена с отношением own_to (администратор принадлежит компании).

Проблема в том, что я использую Devise, и он автоматически берет все мои параметры и пытается создать пользователя. Дело в том, что в параметрах компания - это просто строка имени. Поэтому мне нужно создать компанию, а затем отправить (предположительно) company_id в Devise или настроить ее самостоятельно.

Это то, что я попробовал в Admin: RegistrationController.

def create
  @company = Company.create(name: params[:admin][:company])
  super
  @admin.company = @company
end

Не удается создать администратора, и Devise возвращает ошибку «Компания должна существовать». И, очевидно, довольно хакерский (или, по крайней мере, так чувствует).

Что я должен делать здесь, и какова лучшая практика? Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 января 2019

создать переопределить один новый файл в папке app / controllers / admins / registration_controller.rb и добавьте эту команду ниже (некоторая часть является разработкой стандартной команды)

class Admins::RegistrationsController < Devise::RegistrationsController

  def create
    build_resource(sign_up_params)
    @company = Company.create(name: params[:admin][:company])
    # resource is standard
    resource.company   = @company
    resource.save
  end

end
0 голосов
/ 14 января 2019

Вы можете переопределить #build_resource, чтобы подключиться к оригинальной #create реализации :

class Admin:RegistrationController < ::Devise::RegistrationsController
  def build_resource(hash = {})
    super
    if action_name == "create"
      self.resource.company ||= Company.create 
    end
  end
end

Однако, с точки зрения UX, возможно, было бы лучше позволить пользователю выбрать существующие компании с помощью выбора или использовать accepts_nested_attributes , чтобы позволить пользователю заполнять поля для компании.

Вы также можете сделать ассоциацию необязательной и позволить пользователю заполнить данные о компании после регистрации.

Какая лучшая практика?

Каким бы способом ни выполнялись требования в срок.

...