我正在构建一个具有多个角色的Rails应用程序。我不能对用户模型使用继承,因为每个角色具有非常不同的属性和行为(即 - 登录后不同的页面访问和能力)。所以我决定为每个角色建立单独的模型(即 - 客户,服务提供商,客户代表等)。
这种协会如何运作?我想出了以下内容但是角色课对我来说看起来很糟糕。如果用户可以拥有多个角色,那就不会那么糟糕,但由于他们只有一个角色,我必须在角色中编写自定义验证,确保只选择了一个角色。你们觉得怎么样?
class User < ActiveRecord::Base
has_one :role
end
class Role < ActiveRecord::Base
has_one :customer
has_one :service_provider
has_one :customer_representative
end
class Customer < ActiveRecord::Base
end
class ServiceProvider < ActiveRecord::Base
end
class CustomerRepresentative < ActiveRecord::Base
end
答案 0 :(得分:5)
我认为这里的问题与您的“角色”模型有关。角色实际上不是物理的东西,而是其他对象应该遵循的界面。因此,它具有多态关系。
class User < ActiveRecord::Base
belongs_to :role, polymorphic: true
end
class Customer < ActiveRecord::Base
has_one :user, as: :role
end
class ServiceProvider < ActiveRecord::Base
has_one :user, as: :role
end
class CustomerRepresentative < ActiveRecord::Base
has_one :user, as: role
end
然后,您需要将role_id
和role_type
添加到用户表格中。
这应该得到你想要的东西。
乔