Rails中的单表继承 - 如何在我的表中获取具有多个子类型的记录,同时仍然使用单表继承?

时间:2014-08-30 16:35:58

标签: sql ruby-on-rails inheritance ruby-on-rails-4

我试图在Rails中使用单表继承作为允许用户拥有多个用户子类型(例如,教师,供应商等)的手段。我最终得到的用户表中只包含一个用户类型的记录。虽然仍然使用单表继承,但如何让我的用户拥有多种类型? (我知道这实际上是一种多对多的关系;我只是不确定如何使用STI来实现这一点。)

id | first_name | last_name | birth_date | city | zip_code | email |  type   |         created_at         |         updated_at
----+------------+-----------+------------+------+----------+-------+---------+----------------------------+----------------------------
  1 | Akira      | Yamaoka   |            |      |          |       | Vendor  | 2014-08-30 14:58:26.917333 | 2014-08-30 14:58:26.917333
  2 | Pyramid    | Head      |            |      |          |       | Faculty | 2014-08-30 15:02:04.70209  | 2014-08-30 15:02:04.70209

以下是我的模特'类:

user.rb

1 class User < ActiveRecord::Base
2 end

vendor.rb

  1 class Vendor < User
  2   belongs_to :user
  3   belongs_to :event
  4 end

faculty.rb

1 class Faculty < User
2   belongs_to :user
3   belongs_to :event
4
5 end

2 个答案:

答案 0 :(得分:0)

你可以这样写:

class User < ActiveRecord::Base
  belongs_to :event
end

class Vendor < User
end

class Faculty < User
end

然后通过User模型获取具有不同类型的记录,例如User.all

答案 1 :(得分:0)

答案简短:不,您不能这样做,type列只能包含一个值。

更长的答案:多对多关系要求存在一个额外的模型(必须,HABTM只是在这里做过)​​,其中包含对{{1和User。我称之为Event in this answer to your another question

您应该是Pass的子类,而不是Pass。由于User User(可能是has_many :passes个子类,Pass可以通过多种方式参与活动:作为供应商或教职员。

我提供了一些示例代码here