我正在尝试实施一个可以拥有一个或多个用户的顶级帐户。我的应用程序使用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表中的一列。当新用户注册时,我想为该用户创建一个新帐户,并将公司属性设置为他们在公司字段中提供的任何内容。
我在使用表单(添加公司字段)和控制器(创建新帐户并在用户提交表单时更新公司字段)所需的代码时遇到问题。
谢谢!
答案 0 :(得分:1)
我刚刚完成了具有类似要求的应用程序。这段关系看起来不错。您可能需要在before_save
上使用User
过滤器来获取与Account
关联的数据,并同时添加/更新关联。
您还应该查看accepts_nested_attributes_for
,虽然我认为它旨在处理更常见的情况,即父母(在您的情况下为帐户)正在推动子女(用户)的创建。我怀疑您正在创建一个具有设计的用户,然后创建关联,或者将相关数据添加到帐户模型。
要考虑的一件事是公司是否是自己的模型,在这种情况下,用户有帐户,而帐户有公司。您可能想查看最近的RailsCasts on "multi-tenant" applications - 虽然它们可能不适用于您的情况,但是我们在我的情况下做了,并且在我第一次管理和构建数据时,有一些我没想过的事情启动了应用程序。