Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设计、创建一个属于公司的用户_Ruby On Rails_Devise_Slim Lang - Fatal编程技术网

Ruby on rails 设计、创建一个属于公司的用户

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

我想创建一个与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 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