用设计用户创建员工

时间:2015-10-02 03:29:53

标签: ruby-on-rails ruby-on-rails-4 devise

看起来像这样 Profile model for Devise users? 但我的不同。

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

所以我有

的员工模型
(NumberStr.indexOf(x) - 1)

和用户模型

has_one :user
accepts_nested_attributes_for :user

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

这不是这样的,对吗?

belongs_to :employee

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

2 个答案:

答案 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;登录表单 - 没问题 - 因为每个用户都有员工关系...