设计,创建属于公司的用户
Devise, create a user that belongs to company
我想使用 Devise 创建一个具有 belongs_to 关联的用户。
少了什么?从 select 列表中创建属于公司的用户需要什么?
我的表格有这个:
.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
我的 RegistrationsController 也有:
def create
super
end
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :bank])
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 并且您在表单中使用的是公司。尝试更改它并允许此参数。
已解决!
首先,注册控制器没有在 routes 文件中 overriden,只是得到这个:
devise_for :users, controllers: {
sessions: 'users/sessions',
# something missing no?
}
用修复了它
devise_for :users, controllers: {
sessions: 'users/sessions',
registrations: 'users/registrations'
}
然后,只需做一些常见的事情,比如将这样的东西添加到 controller:
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
我想使用 Devise 创建一个具有 belongs_to 关联的用户。
少了什么?从 select 列表中创建属于公司的用户需要什么?
我的表格有这个:
.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
我的 RegistrationsController 也有:
def create
super
end
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :bank])
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 并且您在表单中使用的是公司。尝试更改它并允许此参数。
已解决!
首先,注册控制器没有在 routes 文件中 overriden,只是得到这个:
devise_for :users, controllers: {
sessions: 'users/sessions',
# something missing no?
}
用修复了它
devise_for :users, controllers: {
sessions: 'users/sessions',
registrations: 'users/registrations'
}
然后,只需做一些常见的事情,比如将这样的东西添加到 controller:
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