Первый постер, многократный поиск ответов на сайте (спасибо!). Я использую 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
. Единственное, что в модели компании - это название.
Заранее спасибо!