我试图在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
答案 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。