设计,创建一个属于公司的用户



我想创建一个具有belongs_to关联的Devise用户。

缺少什么?从选择列表创建属于公司的用户需要什么?

我的表格是这样的:

.siimple-form-field
= f.label :name, class: "siimple-label"
br
= f.text_field :name, autofocus: true, autocomplete: "email", class: "siimple-input siimple-input--fluid siimple--height-50"
.siimple-form-field
label.siimple-label
| Select an option:
= f.fields_for :company_attributes do |b|
= b.select :company, Company.all.collect{|p| [p.name, p]}, {}, class: "siimple-select siimple-select--fluid"

表格显示"正常",所以当我尝试提交时,它说:

1 error prohibited this user from being saved:
Company must exist

此外,我的注册控制器具有:

def create
super
end

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

解决了!

首先,注册控制器没有在路由文件中被覆盖,只是得到这个:

devise_for :users, controllers: {
sessions: 'users/sessions',
# something missing no?
}

修复了它

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

然后,只需执行常见操作,例如向控制器添加类似以下内容:

def create
params[:user][:company] = Company.find(params[:user][:company_id])
super
end

并将缺少的权限添加到configure_sign_up_params

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

我认为您在这里的问题是不允许使用公司参数(这意味着公司设置为nil,因此Company must exist错误(。

您必须覆盖 Devise 的resource_params方法来添加您的company_id属性。尝试将其放入注册控制器中:

def resource_params
params.require(:user).permit(:user_attribute_foo, :user_attribute_bar, :company_id)
end

我认为您的列名称是company_id,并且您在表单中使用了公司。尝试更改它并允许此参数。

相关内容

最新更新