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

时间:2018-06-29 15:42:49

标签: ruby-on-rails devise slim-lang

我想用Devise创建一个用户,该用户具有一个Emirates_to关联。

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

我的表格有这个:

.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

我的 RegistrationController 还有:

def create
  super
end


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

3 个答案:

答案 0 :(得分:1)

我认为您的问题是不允许使用公司参数(这意味着公司设置为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

答案 1 :(得分:1)

已解决!

首先,路由文件中的注册控制器没有被覆盖,只是得到了以下信息:

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

答案 2 :(得分:0)

我认为您的列名称是company_id,并且您正在使用表格中的company。尝试通过更改它并允许使用此参数。