Ruby on rails 设计、创建一个属于公司的用户
我想创建一个与Desive有关联的用户 少了什么?从选择列表中创建属于公司的用户需要什么 我的表格如下:Ruby on rails 设计、创建一个属于公司的用户,ruby-on-rails,devise,slim-lang,Ruby On Rails,Devise,Slim Lang,我想创建一个与Desive有关联的用户 少了什么?从选择列表中创建属于公司的用户需要什么 我的表格如下: .siimple-form-field = f.label :name, class: "siimple-label" br = f.text_field :name, autofocus: true, autocomplete: "email", class: "siimple-input siimple-input--fluid siimp
.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"
表单显示ok,因此当我尝试提交时,它会显示:
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
我认为您这里的问题是不允许使用公司参数(这意味着公司被设置为
nil
,因此公司必须存在
错误)
您必须重写Devise的资源参数
方法才能添加您的公司id
属性。尝试将其放入您的注册控制器:
def resource_params
params.require(:user).permit(:user_attribute_foo, :user_attribute_bar, :company_id)
end
我认为您的列名是company_id,您在表单中使用的是company。尝试更改它并允许此参数。已解决强> 首先,注册控制器在路由文件中未被覆盖,只是得到以下信息:
devise_for :users, controllers: {
sessions: 'users/sessions',
# something missing no?
}
用
devise_for :users, controllers: {
sessions: 'users/sessions',
registrations: 'users/registrations'
}
然后,只需在控制器中添加类似的内容即可:
并将缺少的权限添加到配置注册参数
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :company_id, :company])
end
使用HAML并不容易,但您可以使用
字段\u作为
,这是一种获取属于另一个模型的字段的方法。我不确定你能(轻易地)用Desive做到这一点。您应该查询的唯一字段是Desive模型的字段。如果您的设计模型用户是公司的子公司,只需输入Company\u id
字段,该字段应该是您的用户设计模型字段之一。(你可以通过显示公司的名称而不是选择帮助者来让它变得更好)(我正在考虑你想添加用户的公司已经存在。如果你想创建公司和用户一起,这是另一个故事)公司已经存在,我有一个选择列表来选择必须属于的公司。
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :company_id, :company])
end