ruby-on-rails – Ruby on Rails中的多个用户角色

我正在构建一个包含四种不同用户类型的库存管理应用程序:admin,employee,manufacturer,transporter.我还没有开始编码,但这正是我的想法.制造商和运输商与has_many有关:通过与产品的多对多关联,如下所示:
class Manufacturer < ActiveRecord::Base
 has_many :products
 has_many :transporters,:through => :products
end

class Product < ActiveRecord::Base
 belongs_to :manufacturer
 belongs_to :transporter
end

class Transporter < ActiveRecord::Base
 has_many :products
 has_many :manufacturers,:through => :products
end

所有四种用户类型都可以登录,但它们将具有不同的权限和视图等.但是,我不认为我可以将它们放在同一个表(用户)中,因为它们会有不同的要求,即:供应商制造商必须有帐单地址和联系信息(通过验证),但管理员和员工不应该有这些字段.

如果可能的话,我希望有一个登录屏幕,而不是4个不同的屏幕.

我不是要求确切的代码来构建它,但我无法确定实现它的最佳方法.任何想法将不胜感激 – 谢谢!

解决方法

你的基本方法看似合理.我建议你创建一个User的基类,并为特定的User类型使用STI,例如:
class User < ActiveRecord::Base
end

class Manufacturer < User
 has_many :products
 has_many :transporters,:through => :products
end

…等等.这样,如果需要将多个用户类型聚合到一个关系中而不管类型如何,则通常会有一个表来描述用户.这是一种相当常见的方法.

根据不同用户对系统的访问权限,您可能需要查看角色管理宝石,如Declarative Authorization.

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...