加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Ruby on Rails多态关联

发布时间:2020-12-16 21:09:00 所属栏目:百科 来源:网络整理
导读:这是我正在努力实现的目标:我有一个用户表,每个用户可以是十几种类型中的任何一种:演员,舞者,导演……这是在注册后确定的.每种类型的用户都可以拥有任意数量的配置文件.例如.演员可以拥有任意数量的actor_profiles,舞者可以拥有任意数量的dancer_profiles,
这是我正在努力实现的目标:我有一个用户表,每个用户可以是十几种类型中的任何一种:演员,舞者,导演……这是在注册后确定的.每种类型的用户都可以拥有任意数量的配置文件.例如.演员可以拥有任意数量的actor_profiles,舞者可以拥有任意数量的dancer_profiles,……

问题是如何将配置文件与用户链接.一个显而易见的解决方案是为每个配置文件类型创建一个aditional表,这样我就可以在User中使用多态的belongs_to,然后在每个配置文件中使用一个简单的belongs_to,但这似乎不是最佳的.一个可以说是更好的方法是告诉rails用户使用类型为actor,这样user.profiles就可以自然地工作,而不会有任何混乱. rails是否支持这种行为,还是有比前一种方法更好的东西?谢谢.

解决方法

pjb的答案使用单表继承.为此,您需要向您的Users和您的Profiles *表添加一个名为type的列,以便Rails可以保存这是什么类型的用户(因为Actor,Dancer等只是User的子类).

这意味着它们将全部保存在用户/配置文件表中,但是当您实例化它们时,ActiveRecord会将它们实例化为正确的类型.有了这个,你就可以打电话了

User.find

但也做的事情

Actor.find,Actor.all,etc

并将它限定为只有Actors

Google会锁定单表继承以获取更多详细信息和示例.

>当然,您需要以声明User子类的方式声明您的Profile子类

class Profile<的ActiveRecord :: Base的
belongs_to:用户
结束

class ActorProfile<轮廓
结束

class DancerProfile<轮廓
结束

等等

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读