1

我有一个系统,我需要从主页上的一个登录表单登录三种用户类型:客户、公司和供应商。

我在http://github.com/binarylogic/authlogic_example创建了一个根据 AuthLogic 示例应用程序工作的用户表。我添加了一个名为“用户类型”的字段,该字段当前包含“客户”、“公司”或“供应商”。

注意:每个用户类型都包含许多不同的字段,所以我不确定单表继承是否是最好的方法(如果这个结论无效,欢迎更正)。

这是一种多态关联,其中三种类型中的每一种都用用户记录“标记”?我的模型应该如何显示,以便在我的用户表和我的用户类型客户、公司、供应商之间建立正确的关系?

非常感谢!

- - - 更新 - - -

当前设置:

#User model
class User < ActiveRecord::Base
  acts_as_authentic
  belongs_to :authenticable, :polymorphic => true
end

#Customer model (Company and Vendor models are similar)
class Customer < ActiveRecord::Base
  has_many :users, :as => :authenticable
  acts_as_authentic
end

这是设置它们的有效方法吗?

4

1 回答 1

0

这听起来像是您正在尝试做的事情:

你有users那个可以在三个之一groups。如果这不太正确,那么稍微澄清一下会有所帮助。

由于 AuthLogic 只关心它的特殊字段,因此在您的用户模型中创建和使用其他字段并不是什么大问题。

每个都user可能是这样组成的:

#The Authlogic Fields
t.string :username,          :null => false
t.string :crypted_password,  :null => false
t.string :password_salt,     :null => false
t.string :persistence_token, :null => false

#Your field to identify user type
t.integer :user_type

#If your user is a customer, you would populate these fields
t.integer :customer_name
...

#If your user is a company, you would populate these fields
t.integer :company_name
...

#If your user is a vendor, you would populate these fields
t.integer :vendor_name
...

我不确定您所说的“单表继承”是什么意思,但是如果您想将有关 avendor的信息保存在与 users 表分开的表中(除非您真的很关心性能,否则没有理由这样做),您可以链接您的像这样的模型:

class User < ActiveRecord::Base
  has_many :customers, :companies, :vendors
end

class Customer < ActiveRecord::Base
  belongs_to :user
end

class Company < ActiveRecord::Base
  belongs_to :user
end

class Vendor < ActiveRecord::Base
  belongs_to :user
end

在这种情况下,由于用户与 3 种用户类型中的 2 种没有关联,因此您被迫使用has_many与 0 关联情况很好地配合的关联。你只需要在你的代码中做一些检查,以确保你不会加倍。

于 2010-05-26T04:48:09.677 回答