Reflection - 实现之关联两者
关系图
HasManyReflection & HasOneReflection & BelongsToReflection & HasAndBelongsToManyReflection RuntimeReflection
| |
V V
AggregateReflection & AssociationReflection PolymorphicReflection
| |
V V
MacroReflection & ThroughReflection
|
V
AbstractReflection延续 build 目录下 association 文件的工作。
一个很重要的概念,包含了所有的关联信息。 包括但不限于:用的是什么关联、关联对象名字、可选参数等。
一般关联和 aggregate 要区分开来。前者用 _reflections,后者用 aggregate_reflections.
提供方法:
1) 模块方法
create
add_reflection
add_aggregate_reflectioncreate
可以创建 Aggregate Reflection,Has Many Reflection、Has One Reflection 和 Belongs To Reflection 4 种关联;
如果使用了 :through 则还会自动生成 Through Reflection 关联。
2) 类方法
使用举例
其它
Reflection 虽然很重要,但对于普通 Web 开发者而言,使用场景有限,一般不会直接使用。下面是我想到的一些使用场景,供参考:
动态创建其关联对象的实例,如:在表单里点击按钮,创建一个嵌套对象(属性)。
查看使用 gem 后引进了什么关联。
删除某个重要对象时,删除所有与之关联的对象。预防用 :dependent 或手动删除会有遗漏。
最后更新于
这有帮助吗?