2

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

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

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

用户.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

账户.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" %>

这是我可以使用的一些帮助

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

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

谢谢!

4

1 回答 1

1

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

您还应该查看accepts_nested_attributes_for,尽管我认为它旨在处理更常见的情况,即父母(在您的情况下为帐户)正在推动子(用户)的创建。我怀疑您正在使用 Devise 创建用户,然后或稍后创建关联,并将关联数据添加到 Account 模型。

需要考虑的一个问题是,Company 是否是它自己的模型,在这种情况下,Users 有 Accounts,Accounts 有 Companies。您可能想查看最近有关“多租户”应用程序的 RailsCasts ——虽然它们可能不适用于您的案例,但它们在我的案例中适用,并且在管理和构建数据时有一些我没有考虑过的事情当我第一次启动应用程序时。

于 2012-11-29T17:17:24.390 回答