我在rails应用程序上编写ruby,它将有2种不同的用户类型(比如卖家和买家)。我正在使用devise gem来处理身份验证。
我不想使用单表继承有三个原因:
1)我不希望在我的用户表中有很多列(我必须在一个表中存储卖方和买方的字段,并且它们将有很多不同的文件)
2)我不想在我的数据库中有很多空值
3)保持卖家和买家分开将有助于提高绩效速度
我决定为卖家和买家创建2个独立的模型(并为每个模型生成设计)。长话短说 - 它引起了一些麻烦(即,使用单一形式处理登录时遇到困难,使用多态关联来处理简单的事情,如“私信”,保持我的代码DRY等。)
所以这就是问题:
您是否认为创建一个具有一些常见字段的模型(用户)以便使用设计轻松处理身份验证,然后使用belongs_to和has_one关联来存储更多信息的单独模型(卖家和买家)。像这样:
class User < ActiveRecord::Base
has_one :seller
has_one :buyer
end
class Seller < ActiveRecord::Base
belongs_to :user, :conditions => "user_type= 'seller'"
end
class Buyer < ActiveRecord::Base
belongs_to :user, :conditions => "user_type= 'buyer'"
end
这是一个很好的解决方案吗?或者您认为单表继承会更好吗?
可能造成什么麻烦/困难?
每个用户显示个人资料页面的路由是什么?我希望有类似 website.com/sellers/id 和 website.com/buyers/id
如果你能为我的问题想出更好的解决方案 - 请告诉我。
答案 0 :(得分:1)
也许您正在寻找多表继承:
http://techspry.com/ruby_and_rails/multiple-table-inheritance-in-rails-3/
http://mediumexposure.com/multiple-table-inheritance-active-record/
答案 1 :(得分:1)
如果您为卖方和买方创建单独的表并使用像Inheritance and polymorphic-associations in rails那样的多态关联,那会更好。
分离这两件事,你将在数据库查询中获得速度,并保持卖家和买家逻辑在他们自己的课程上也是非常好的做法。