首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过直通类将子类与父类连接的Rails查询

是指在Rails框架中使用Polymorphic关联来连接子类与父类的关系。

Polymorphic关联是一种特殊的关联方式,允许一个模型同时属于多个其他模型。在Rails中,可以使用直通类(Polymorphic)关联来实现这种多态的关联。

在Rails中,通过添加一个类似于<association_name>_type<association_name>_id的字段到模型中,实现子类与父类的连接。<association_name>_type字段用于存储关联对象的类名,<association_name>_id字段用于存储关联对象的ID。

以下是一个示例模型,其中使用了直通类将子类(Comment)与父类(Post、Photo)连接起来:

代码语言:txt
复制
class Comment < ActiveRecord::Base
  belongs_to :commentable, polymorphic: true
end

class Post < ActiveRecord::Base
  has_many :comments, as: :commentable
end

class Photo < ActiveRecord::Base
  has_many :comments, as: :commentable
end

在上面的示例中,Comment模型通过belongs_to :commentable, polymorphic: true声明了一个多态关联,可以关联到不同的模型。

通过这种方式,可以在查询中使用commentable来访问相应的父类对象,例如:

代码语言:txt
复制
comment = Comment.first
comment.commentable # 返回关联的父类对象(Post或Photo)

这种多态关联的优势在于可以将不同类型的子类模型统一管理,并且灵活地处理关联查询。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法提供相关链接。但是,腾讯云提供了一系列云计算服务,可以在其官方网站中找到相关信息。

总结来说,通过直通类将子类与父类连接的Rails查询是一种使用Polymorphic关联来实现多态关联的方式,可以使子类与父类之间建立关联并进行查询操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在NHibernate的单表继承模式下通过父类Repository查询子类

在NHibernate中经常遇到继承与关系数据库的ORMapping的问题,我之前的一篇博客(http://www.cnblogs.com/studyzy/archive/2011/08/16/2140675...使用单表继承可以不用Join多个表查询效率高,而且在Domain Model的属性提示到父类或者下降到子类时,数据库模型不用更改。...在NHibernate中经常会遇到通过父类的Repository来查询子类的情况,比如现在有一个抽象的Employee对象,下面有OfficeUser和Teacher两个具体的对象,这两个对象都有其特有的属性...我们可以将OfficeUser和Teacher都保存到Employee表中,然后建立了一个EmployeeRepository,使用Employee作为Query的入口,那么如果要查询Employee表中所有的...以上是以最简单了例子说明了如果通过父类查询具体的子类的方法,实际项目中肯定比这个查询要复杂,但是只要记住了这三种查询的要点,结合其他条件就可以写出NHibernate能够理解的查询。

35920
  • Java子类与父类之间的对象转换(说明继承)

    从子类向父类的转换称为向上转换(upcasting),通过向上转换,我们能够在编写程序时采用通用程序设计的思想,在需要使用子类对象的时候,通过把变量定义为父类型,我们可以通过一个变量,使用该父类型的所有子类型实例...;从父类型向子类型的转换称为向下转换(downcasting),通过向下转换,我们能在必要的时候,将父类型变量转换成子类型变量,使用一些通过子类型才能够使用的方法。...向上转换比较直观,总是能够将一个子类的实例转换为一个父类的对象,从继承链的角度,这个特性很容易理解:继承是一种“是一种”的关系,从父类派生出的子类,我们都能理解为,子类总是父类的一个实例。...因此,从子类向父类的转换不需要什么限制,只需直接将子类实例赋值给父类变量即可,这也是Java中的多态的实现机制。...原因是因为,Java编译器并没有聪明到能够在编译阶段就知道父类型变量是哪一个子类的实例,所以,将animal转换为Lion类型的代码:(Lion)animal是能够编译通过的,即使事实上我们能看到animal

    3.8K20

    父类和子类对象的获取值的方式验证,通过父类属性的方式获取不到值,需要使用get方法

    父类和子类对象的获取值的方式验证,通过父类属性的方式获取不到值,需要使用get方法 静态属性通过类.属性的方式获取,对象获取使用get方法获取 package com.example.core.mydemo.java...String channelName) { this.channelName = channelName; } /** * partnerName: //通过父类属性的方式获取不到值...,需要使用get方法 * channelName: //通过父类属性的方式获取不到值,需要使用get方法 * partnerName2:合作商名称 * channelName2...* channelName3:渠道商名称 //对象自身的属性值可以获取 * partnerName4:合作商名称 * channelName4:渠道商名称...* MAX=100 静态属性通过类.属性的方式获取,对象获取使用get方法获取 * @param args */ public static void main(String

    9910

    【C++】多态 ⑩ ( 不建议将所有函数都声明为 virtual 虚函数 | 多态的理解层次 | 父类指针和子类指针步长 )

    没有添加任何 成员函数 与 成员方法 , 那么子类指针 与 父类指针 的步长是相同的 ; 一、不建议将所有函数都声明为 virtual 虚函数 C++ 类中 , 每个 成员函数 都可以声明为 virtual...调用 虚函数 可执行 子类对应的函数 ; 多态实现条件 : ① 继承 , ② 虚函数重写 , ③ 父类指针/引用指向子类对象 ; 父类指针 可以 指向 父类对象 , 也可以指向 不同的 子类对象 ;...通过 父类指针 调用 virtual 虚函数 , 会根据实际的对象类型调用不同的 虚函数 , 而不是死板的调用父类的成员函数 ; 多态实现原理 : 虚函数 对应 动态联编 , 非虚函数 对应 静态联编...自定义的 Student 类型 , 则 p++ 的计算结果是 p 指针的地址值 加上 sizeof(*p) 对象的字节长度 ; 显然 父类 与 子类 对象 的 字节大小是不同的 , 在进行数组操作 ,...是 根据 指针 指向的 内存空间 的数据类型确定的 ; 子类 继承 父类 , 如果 子类 没有添加任何 成员函数 与 成员方法 , 那么子类指针 与 父类指针 的步长是相同的 ; 代码示例 : #include

    30350

    QObject

    你可以使用connect()将信号连接到插槽,也可以使用disconnect()来断开连接。为了避免一直通知槽函数,还可以使用blockSignals()来暂时阻塞信号。...父对象拥有子对象的所有权,即父对象将在析构函数中自动删除其child对象。可以通过findChild()或findChildren()来查找对象。...每个对象都有一个对象名称(objectName())和类名称(class name), 他们都可以通过相应的 metaObject 对象来获得。...你还可以通过 inherits() 方法来判断一个对象的类是不是从另一个类继承而来。 当对象被删除时,它发出destroyed()信号。...Qt官方强烈建议在QObject的所有子类中都使用该宏,不论它们是否实际使用信号和插槽或属性,因为不这样做可能会导致某些奇葩的错误。我个人是不愿意解决奇葩的错误的,比较浪费精力。

    1.2K10

    Entity Framework 继承映射

    ,该表包含所有类中的所有属性,特定行表示的具体子类通过 discriminator 来标识区分。...一、TPT TPT是常用的策略,通过外键来表示继承,父类和子类分别位于不同的表中,子类表包含自身属性列和父类表的外键,并将父表的外键作为子类表的主键。...与父类的多态关联将被表示为引用父类表的外键。缺点在于性能极差,如果要进行查询就要多表连接查询。...二、 TPC TPC是不被推荐的策略,因为他会为每个子类创建一个表,并且将父类中的所有属性映射进每个子类表中。...下面总结一下以上三种策略的使用场景 策略 场景 TPC 不需要多表关联查询或者很少查询父类数据,并且没有与父类关联的类 TPH 需要多表关联查询,且子类的属性较少 TPT 需要多表关联查询,且子类的属性很多

    82310

    17.Swift学习之类

    )") 对于复合类型的属性,可以一直通过.下去来访问子属性 print("The width of someVideoMode is \(someVideoMode.resolution.width)"...当一个类从另一个类继承的时,继承的类就是子类,被继承的就是父类 定义一个父类 class Vehicle { var currentSpeed = 0.0 var description...class Bicycle: Vehicle { var hasBasket = false } 重写 所谓重写就是子类可以对继承自父类实例方法、类型方法、实例属性,类型属性进行覆盖 重写需要在前面加上...override 关键字 override 关键字执行时Swift 编译器会检查重写的类的父类(或者父类的父类)是否有与之匹配的声明来提供重写 class Train: Vehicle { override...class func 类与结构体的对比 相同点 定义属性 定义方法 定义初始化器 可以被扩展 遵循协议 类有而结构体没有的额外功能 继承 类型转换 析构 引用计数

    61330

    Java static关键字与static{}语句块

    目录直通车 一、 类的加载特性与时机 1、 类加载的特性 2、 类加载的时机 二、 static的三个常用 1、 修饰成员变量 2、 修饰成员方法 3、 静态块(static{}) ---- 一、 类的加载特性与时机...2、 类加载的时机 1)第一次创建对象要加载类. 2)调用静态方法时要加载类,访问静态属性时会加载类。 3)加载子类时必定会先加载父类。...4)创建对象引用不加载类. 5) 子类调用父类的静态方法时 (1)当子类没有覆盖父类的静态方法时,只加载父类,不加载子类 (2)当子类有覆盖父类的静态方法时,既加载父类,又加载子类 6)...实际上从更大的角度而言,它存放的是各种类的定义,当我们通过new来生成对象时,会根据这里定义的类的定义去创建对象。...,会按照static块的顺序来执行每个static块,一般用来初始化静态变量和调用静态方法。 下面通过两段代码,说明 static{} 为什么能优化程序性能。

    47830

    Py测开《操作mysql的上下文管理器代码详解、多态和私有属性含义的总结》

    连接到数据库之后会返回一个con连接,那么通过这个连接获取到cursor这个操作的游标。...3.cur.fetchone()与cur.fetchall()的区别 cur.fetchone():查询出有多条数据的时候,将只取最上面的第一条结果。...cur.fetchall():查询出有多条数据的时候,将返回所有结果。...多态:指的是一类事物有多种形态,建立在继承的基础上,一个抽象的父类有多个子类,每个子类都具有相同的方法。在函数里只需要指定父类这种类型的对象就行了,传的是哪个子类不用管,只要是这个父类就行了。...在每个子类里面实现不同的方法,通过这个对象调用同一个方法。但是因为传进来的子类不同,子类里面方法的实现又不同,每个方法做的事情不一样。 这个时候传入同一类事物,在这里出现多种表现形式。

    36740

    UML图例之类图

    UML图例之类图 作为UML图例中的重要角色,通过许多(静态)说明性的模型元素(例如类、包和它们之间的关系,这些元素和它们的内容互相连接)描述系统静态结构,帮助我们快速了解、理清系统中对象之间的关系。...依赖关系:没有直接的关系,仅仅在代码运行期间,产生的依赖,如将A类中间的时间属性赋值到B类中的时间属性。A类中调用类中类型为B类的属性,A类中调用的方法,需要用到B类的信息等。设计上用箭头虚线表示。...二、UML类图与数据表 类图到表结构的映射中只需考虑泛化、关联关系。  1、泛化关系 父类和子类映射为表,结构简单,更改方便,但数据分散,子类众多情况下,表数量也众多。...只将子类映射为表,数据集中,方便查询,但如果父类字段扩充,需要修改子类下所有的表。...只将父类映射为表,表的数量少,读写方便,但列数量增多,所有子类的列都在父类表中存在,一行数据中,关注的信息量变少,空闲列增加。

    1.4K20

    Java虚拟机 - 超级详细的类加载说明

    如何确定一个类是唯一的? (1)通过java文件的全路径名。 (2)通过加载类的类加载器。...... 2、准备(理解即可) 验证通过后,说明当前的.class文件是安全的,就进入连接的第二阶段,准备阶段,该阶段主要是为给类的被static修饰的变量分配内存并设置变量的初始值的阶段...对于静态变量、静态块、非静态变量、非静态块、构造器类的初始化顺序: 父类静态块和父类静态变量—>子类静态块和子类静态变量—>父类非静态块和父类非静态变量—>父类构造器—>子类非静态块和子类非静态变量...如上图所示,当寻找ExtClassLoader的父类加载器时,又出现了空指针异常。那么这里就有了一个疑问,示例四种的空指针异常的原因是不是与查询String类加载器异常的原因一样呢?...,继承了ClassLoader方法,根据类加载的目的作用来重新findClass方法,name为传入的类名,将类名转换成编译后的类名.class文件,根据文件路径名读取该文件并转化为二进制流,最后通过defineClass

    47020

    数据库设计方法论 - 继承

    继承这个概念做java开发的同学应该都很熟悉了,继承指的是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。...我们实际设计中经常会不经意中使用到数据库到继承,下面分别介绍一下他们的概念: 概念解析 具体表继承 不建立父对象,将父对象的所有属性转移到子对象中,为每个子对象建立对于的表。...类表继承 对父对象和每个子对象建立一个对应的表,然后在子表中设置该子表的主键为与父表关联的外键。 设计示例 假如你现在在做个教学系统,系统中有三个角色:学生、家长、老师。...,显示用户的公共字段) 使用场景:适用于子表关联性较弱的业务场景,并且识别出系统没有公共数据查询的需求 单表继承 优点:库表设计简单,获取子表数据时不需要join连接。...类表继承 优点:库表的层次结构清晰;为子类添加属性不用修改父表,添加公共属性不需要修改子表;查询公共数据时不需要去查询多个表;扩展性强 缺点:获取对象完整数据需要join查询,在数据量很大时影响查询效率

    1.6K30

    聊聊设计模式之模板方法模式

    导语 模板方法模式是指在父类中定义好算法的骨架,而把具体的算法步骤交给子类去实现的一种设计模式。...因此我们可以想办法将除了第4个步骤之外的步骤“抽出来”进行复用,第4个步骤就让不同的数据库查询去“定制”就好了,这也就是模板方法的精髓:父类将一个算法的步骤定义好,将共同的步骤在父类实现以实现复用,而子类只要实现定制化的部分就行了...我们先定义好父类,也就是JDBC查询的模板。...由于需要子类实现从resultSet到业务bean的转换,所以将父类定义成抽象类: public abstract class QueryTemplate { private static...如果你使用的是JDK8或JDK9,那么可以将模板声明为接口,复用的算法步骤使用default进行声明,这样的话子类只要实现父接口,然后实现自定义的算法步骤就行了,如此一来子类就能继承其他类了。

    725110

    从源码学习设计模式之模板方法

    这样使用模板方法,可以抽取共用逻辑到父类,在子类实现具体算法细节,这样减少了重复代码。 模板方法充分运用了多态与继承。使用抽象父类定义抽象操作,然后在公共逻辑调用抽象方法。...子类方法只要继承父类关注自身实现细节。 Talk is cheap. Show me the code 下面拿支付接入支付渠道例子来使用模板方法。 假设银行卡支付需要实现两家银行的支付功能。...不同银行提供的接口,在参数,调用方式等肯定存在很大区别。这个时候我们就可以使用模板设计方法,父类实现支付前通用逻辑,用子类实现交互的不同。系统类结构如下。 ?...(URL, NAME, PASSWORD); //3.通过数据库的连接操作数据库,实现增删改查 PreparedStatement pstmt = conn.prepareStatement...ORM 框架重要作用在于把数据库表与 java,ORM 框架省去我们自己将 java 类型转化成 JDBC 类型的麻烦。JDBC 存在有那么多类型,如何做到转换的那?其实关键就是应用模板设计方法。

    54230

    Mysql自连接查询「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 自连接查询 假想以下场景:某一电商网站想要对站内产品做层级分类,一个类别下面有若干子类,子类下面也会有别的子类。...我们可以在数据库中创建两个字段来存储id和类别名称,使用第三个字段存储类别的子类或者父类的id,最后通过自连接去查询想要的结果。...自连接查询其实等同于连接查询,需要两张表,只不过它的左表(父表)和右表(子表)都是自己。做自连接查询的时候,是自己和自己连接,分别给父表和子表取两个不同的别名,然后附上连接条件。...查询所有分类以及分类的父类:假想有左右两张表(都是tdb_cates),左表是子表,右表是父表;查询子表的id,子表的cate_name,父表的cate_name;连接条件是子表的parent_id等于父表的...查询所有分类以及分类的子类:还是假想有左右两张表(都是tdb_cates),左表是子表,右表是父表;查询子表的id,子表的cate_name,父表的cate_name;连接条件是子表的id等于父表的parent_id

    1.5K20

    问题整理

    相关子查询,无关子查询 所谓相关子查询,是指求解相关子查询不能像求解普通子查询那样,一次将子查询求解出来,然后求解父查询。相关子查询的内层查询由于与外层查询有关,因此必须反复求值。   ...父类方法被默认修饰时,只能在同一包中,被其子类被重写,如果不在同一包则不能重写。 父类的方法被protoeted时,不仅在同一包中,被其子类被重写,还可以不同包的子类重写。...例如: 父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。...2、子类方法不能缩小父类方法的访问权限。    3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。    4、存在于父类和子类之间。   ...2、不能重载只有返回值不同的方法名。   3、存在于父类和子类、同类中。   js有类的概念,有对象   自我介绍

    1.2K40

    系统学习javaweb-08-学习速查案例02

    c3p0的配置及操作 工具类JdbcUtils中实现常用操作 c3p0配置中,创建连接时指定数据库发送sql语句采用的编码 jdbc:mysql:///hotel?...对properties配置文件的读取 BeanFactory类中实现 4 service层实例化Dao的优化:通过配置文件提供的类名反射实例化对象 BeanFactory工厂类中定义getInstance...BaseServlet 抽取出BaseServlet优化servlet BaseServlet继承HttpServlet,其他所有servlet继承BaseServlet继承HttpServlet 父类通过反射...getDeclaredMethod方法调用子类方法,只要子类中不重写父类中方法,则调用父类中方法 注意,父类中首先实例化的service对象用protected修饰,private修饰需要对得到的参数...method设置method.setAccessible(true); 7 分页bean与查询条件封装类Condition的实现 查询条件封装类Condition再次封装在PageBean中作为参数,在

    50030

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券