看起来像这样 Profile model for Devise users? 但我的不同。
我想创建员工记录,此员工可以选择是否拥有用户帐户。我正在为我的用户使用devise gem。
所以我有
的员工模型(NumberStr.indexOf(x) - 1)
和用户模型
has_one :user
accepts_nested_attributes_for :user
我知道我需要在我的视图中放置嵌套用户,但是如何将其保存在控制器中?
这不是这样的,对吗?
belongs_to :employee
你能给我一些提示或一些有用的链接吗?修改设计很难。谢谢^ _ ^
答案 0 :(得分:1)
Devise;它只是一系列控制器和模型。
如果您想创建employee
,然后将数据传递到User
模型,那么您采取了正确的方法。
您需要做的是遵守约定(IE构建User
模型等)以确保维护Devise的功能:
#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以其强大的参数而闻名。
-
要使表单生效,您将能够使用以下内容:
#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 %>
我没有任何理由 - 或测试 - 反驳这一点。 Devise even suggests您可以使用User.new
调用加载表单。因此,我猜想你将遇到的主要障碍是通过强大的障碍。
答案 1 :(得分:0)
希望我没有被误解,但不需要修改Devise。 只需传递您需要的所有参数,如果有效,直接创建用户:
if (!("Notification" in window)) {
alert("This browser does not support system notifications");
}
// Let's check whether notification permissions have already been granted
else if (Notification.permission === "granted") {
// If it's okay let's create a notification
var notification = new Notification("<h1>Hi there!</h1>");
console.log(notification);
}
如果你想使用&#34;默认&#34;登录表单 - 没问题 - 因为每个用户都有员工关系...