用设计用户创建员工

它看起来像Devise用户的Profile模型? 但我的不同。

我想创建员工记录,该员工可以选择是否拥有用户帐户。 我正在为我的用户使用devise gem。

所以我有员工模型

has_one :user accepts_nested_attributes_for :user 

和用户模型

 belongs_to :employee 

我知道我需要将嵌套用户放在我的视图中,但是如何将其保存在控制器中?

这不是这样的,对吗?

 params.require(:employee).permit(:name, user_attributes: [:email, :password]) 

你能给我一些提示或一些有用的链接吗? 修改设计很难。 谢谢^ _ ^

设计不应该被修改; 它只是一系列控制器和模型。

如果要创建employee ,然后将数据传递到User模型,则采用正确的方法。

您需要做的是遵守约定(IE构建User模型等)以确保维护Devise的function:


 #app/controllers/employees_controller.rb class EmployeesController < ApplicationController def new @employee = Employee.new @employee.build_user end def create @employee = Employee.new employee_params @employee.save end private def employee_params params.require(:employee).permit(:name, user_attributes: [:email, :password, :password_confirmation]) end end 

现在,唯一的问题是user_attributes可能是假的,因为Devise以其强大的params而着称。

-

要使表单生效,您将能够使用以下内容:

 #app/views/employees/new.html.erb <%= form_for @employee do |f| %> <%= f.text_field :name %> <%= f.fields_for :user do |user| %> <%= user.email_field :email %> <%= user.password_field :password %> <%= user.password_field :password_confirmation %> <% end %> <%= f.submit %> <% end %> 

我没有任何理由 - 或测试 - 反驳这一点。 设计甚至建议您可以使用User.new调用加载表单。 因此,我猜想你将遇到的主要障碍是通过强大的障碍。

希望我没有误解,但没有必要修改Devise。 只需传递您需要的所有参数,如果有效,直接创建用户:

 params.require(:employee).permit(:name, :user_wants_account, :whatever, :user => [:email, :password, :password_confirmation]) # manually User.create(:email => params[:employee][:user][:email], :password => params[:employee][:user][:password], :password_confirmation => params[:employee][:user][:password_confirmation], :employee_id => self) 

如果您想使用“默认”登录表单 – 没问题 – 因为每个用户都有员工关系……