Невозможно добавить компанию (из отдельной модели) в Devise User - PullRequest
1 голос
/ 04 июля 2019

Первый постер, многократный поиск ответов на сайте (спасибо!). Я использую Rails 5.2.3, ruby-2.6.2 и Devise gem 4.6.2. Я не смог получить ответ на работу, хотя есть много связанных с этим вопросов здесь , здесь , здесь и здесь .

Когда новый пользователь регистрируется, я хочу, чтобы он выбрал свою компанию из выпадающего списка (уже создан) в форме регистрации. (В конце концов, это будет роль администратора, но это выходит за рамки этого вопроса.)

Я создал контроллер регистрации и добавил код для ряда предыдущих сообщений. Обновление, я не расширял Devise, как я должен был, как указано здесь: Расширение контроллера регистрации Devise . Это мой новый контроллер регистрации.

class Users::RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: [:create]
  before_action :configure_account_update_params, only: [:update]


  def new
     @companies = Company.all
     super

  end

  def create
    @companies = Company.all
    super
  end

  protected


  def configure_sign_up_params
     devise_parameter_sanitizer.permit(:sign_up, keys: [:company_id])
  end


  def configure_account_update_params
     devise_parameter_sanitizer.permit(:account_update, keys: [:company_id])
  end

end

И создал новые файлы в представлениях / регистрациях с new.html.erb и edit.html.erb, чтобы я скопировал точный код из представлений devise / registrations.

Я обновил свой файл route.rb, добавив в него:

devise_for :users, :controllers => { registrations: 'users/registrations', sessions: 'users/sessions' }

Модель моего пользователя:

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  belongs_to :company
  accepts_nested_attributes_for :company
end

Модель моей компании:

class Company < ApplicationRecord
    has_many :users
end

В новой форме регистрации пользователей это работает, чтобы обеспечить раскрывающийся список, но когда я пытаюсь создать нового пользователя, он говорит: 1 ошибка запретила сохранение этого пользователя: Компания должна существовать.

    <%= f.collection_select :company, @companies, :id, :name, prompt: true %>

Я думал, этот пост будет иметь ответ, но похоже, что он использует Rails 3 и attr_accessible, что устарело в Rails 4.

Я не очень понимаю, что делает accept_nested_attributes_for :company. Единственное, что в модели компании - это название.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Добро пожаловать в StackOverflow.

Чтобы добавить больше параметров в форму регистрации устройства, вам необходимо очистить соответствующие параметры с помощью средства очистки устройства.

Вы должны сделать это следующим образом.:

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:company_id])
  end
end

Вы можете найти больше информации о санации параметров и добавлении пользовательских полей в этом разделе readme для devise

Если вы также хотите добавить поле выбора, включающееДля всех существующих компаний следует добавить коллекцию, выберите:

<%= f.collection_select :company_id, Company.all, :id, :name %>

0 голосов
/ 09 июля 2019

Понятно!

Чтобы расширить контроллер Devise, следуйте подсказкам здесь: Расширение контроллера регистрации Devise

Модели пользователей также должны быть обновлены, чтобы включить дополнительный: правда, потому что здесь https://blog.bigbinary.com/2016/02/15/rails-5-makes-belong-to-association-required-by-default.html:

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  belongs_to :company, optional: true
  accepts_nested_attributes_for :company
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...