ruby-on-rails - Ruby on Rails - 2 种用户类型

标签 ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我正在编写 ruby​​ on Rails 应用程序,它将有 2 种不同的用户类型(假设卖家和买家)。我正在使用 devise gem 来处理身份验证。

我不想使用单表继承有 3 个原因:
1)我不想在我的用户表中有很多列(我必须在一张表中存储卖家和买家的字段,并且他们将有很多不同的字段)
2)我不想在我的数据库中有很多空值
3)将卖家和买家分开将有助于提高执行速度

我决定为卖家和买家创建 2 个独立的模型(并为每个模型生成设计)。长话短说 - 它造成了一些麻烦(即处理单一表单登录的困难,使用多态关联来处理“私有(private)消息”等简单的事情,保持我的代码干燥等)

所以问题是:
您是否认为创建一个具有一些公共(public)字段的模型(用户)以便使用设计轻松处理身份验证,然后使用具有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/idwebsite.com/buyers/id

如果您能想到更好的解决方案来解决我的问题 - 请告诉我。

最佳答案

如果您为卖方和买方创建单独的表并使用像 Inheritance and polymorphic-associations in rails 这样的多态关联,那就更好了。

将这两件事分开,您将获得数据库查询的速度,并将卖方和买方逻辑保留在自己的类上也是非常好的做法。

关于ruby-on-rails - Ruby on Rails - 2 种用户类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9600311/

相关文章:

ruby-on-rails - 如何在 UTC 时区中创建 Rails 日志时间戳?

ruby-on-rails - 有什么方法可以防止用户意外发帖两次?

ruby-on-rails - Rspec - 未初始化的常量 RAILS_ENV

ruby-on-rails - 用于安装仅执行一次的 gem 迁移的 Rake 任务

ruby - 在 Ruby 中实际写入磁盘的用户是什么?写入错误

ruby-on-rails - Rails.cache.fetch 在记忆化方面表现更好吗

ruby - `<top (required)>':未初始化的常量Object::ATM(NameError)

ruby - 在 Rails 3 中创建一个 plist

ruby-on-rails - rails : Delete associated records on object destroy

ruby-on-rails - 如何使用 'where'的 'ActiveRecord::QueryMethods'方法来限制搜索?