【发布时间】:2019-11-15 12:03:01
【问题描述】:
首次发帖,多次在网站上找到答案(谢谢!)。我正在使用 Rails 5.2.3、ruby-2.6.2 和 Devise gem 4.6.2。尽管有很多相关的问题here、here、here 和here,但我一直无法得到工作的答案。
当新用户注册时,我希望他们从注册表单的下拉列表(已创建)中选择他们的公司。 (最终,这将是一个管理员角色,但这超出了这个问题的范围。)
我创建了一个注册控制器,并根据之前的一些帖子添加了代码。更新,我没有像这里所指出的那样扩展设计:Extending Devise Registration Controller。这是我的新注册控制器。
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 在视图/注册中创建了新文件,我从设计/注册视图中复制了确切的代码。
我更新了我的 routes.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 %>
我认为this post 会有答案,但这似乎使用 Rails 3 和 attr_accessible,这在 Rails 4 中已被弃用。
我真的不明白accept_nested_attributes_for :company 做了什么。 Company 模型中唯一的内容就是名称。
提前谢谢你!
【问题讨论】:
标签: ruby-on-rails devise