添加一个包含许多“用户”的“帐户”

时间:2012-11-29 16:57:47

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

我正在尝试实施一个可以拥有一个或多个用户的顶级帐户。我的应用程序使用Devise进行身份验证,因此我希望将注册表单作为用户模型的一部分。

我相信我已经正确设置了模型,但是我在查明注册表格应该如何工作时遇到了一些麻烦。

这是我到目前为止所得到的......

User.rb

class User < ActiveRecord::Base
  rolify
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable,
         :validatable, :omniauthable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :role_ids, :as => :admin
  attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :account, :company

  # Association with service accounts
  has_many :service_accounts

  # Association with company account
  belongs_to :account

end

Account.rb

class Account < ActiveRecord::Base
  attr_accessible :company

  # Association with users
  has_many :users, :dependent => :destroy

end

注册/ new.html.erb

<h2>Sign up</h2>
<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => {:class => 'form-vertical' }) do |f| %>
  <%= f.error_notification %>
  <%= f.input :name, :autofocus => true, :placeholder => "Name" %>
  <%= f.input :email, :placeholder => "Email Address" %>
  <%= f.input :password, :placeholder => "Password" %>
  <%= f.input :password_confirmation, :placeholder => "Confirm Password" %>
  <%= f.button :submit, 'Sign up', :class => 'btn btn-large btn-primary' %>
<% end %>
<%= render "devise/shared/links" %>

以下是我可以使用

的帮助

我想在上面的注册表单中添加“公司”字段。公司是Account表中的一列。当新用户注册时,我想为该用户创建一个新帐户,并将公司属性设置为他们在公司字段中提供的任何内容。

我在使用表单(添加公司字段)和控制器(创建新帐户并在用户提交表单时更新公司字段)所需的代码时遇到问题。

谢谢!

1 个答案:

答案 0 :(得分:1)

我刚刚完成了具有类似要求的应用程序。这段关系看起来不错。您可能需要在before_save上使用User过滤器来获取与Account关联的数据,并同时添加/更新关联。

您还应该查看accepts_nested_attributes_for,虽然我认为它旨在处理更常见的情况,即父母(在您的情况下为帐户)正在推动子女(用户)的创建。我怀疑您正在创建一个具有设计的用户,然后创建关联,或者将相关数据添加到帐户模型。

要考虑的一件事是公司是否是自己的模型,在这种情况下,用户有帐户,而帐户有公司。您可能想查看最近的RailsCasts on "multi-tenant" applications - 虽然它们可能不适用于您的情况,但是我们在我的情况下做了,并且在我第一次管理和构建数据时,有一些我没想过的事情启动了应用程序。