gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:03:05 25 4
gpt4 key购买 nike

这是我想要实现的目标:我有一个用户表,每个用户可以是十几种类型中的任何一种: Actor 、舞者、导演……这是在注册后确定的。每种类型的用户都可以拥有任意数量的配置文件。例如。 Actor 可以有任意数量的 actor_profiles,舞者可以有任意数量的 dancer_profiles,...

问题是如何将配置文件与用户链接。一个明显的解决方案是为每个配置文件类型创建一个附加表,这样我就可以在 User 中使用一个多态的belongs_to,然后在每个配置文件中使用一个简单的belongs_to,但这似乎不是最佳的。一个可以说更好的方法是告诉 rails 用户它是 actor 类型,这样 user.profiles 会自然地工作,没有任何困惑。 rails 是否支持这种行为,或者有什么比前一种方法更好的方法?谢谢。

最佳答案

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

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

User.find

但也做类似的事情
Actor.find, Actor.all, etc

并将其范围仅限于 Actor

谷歌 rails single table inheritance有关更多详细信息和示例。
  • 当然,您需要以与声明 User 子类相同的方式声明 Profile 子类

  • 类 Profile < ActiveRecord::Base
    归属地:用户
    结尾

    类 ActorProfile < 配置文件
    结尾

    class DancerProfile < 简介
    结尾

    等等

    关于ruby-on-rails - Ruby on Rails 多态关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/617535/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com