`

belongs_to 多级关联关系

阅读更多
有一种情况,是这样的c属于b,b属于a,但是我们有时候想建立c属于a的关系,也就是c.a替代原来的c.b.a,那么可以使用through和has_one的结合使用来实现这个.

例如


1)
class A
  has_one :b
end

class B
  belongs_to :a
  has_one :c
end

class C
  belongs_to :b
  has_one :a, :through => b
end


注意:   belongs_to 不能和through一起使用,至于原因,我看了rails官方解释,但是看不懂.


2)
还有一些其他的解决方式,例如delegate也可以解决这个问题
class A
  has_one :b
end

class B
  belongs_to :a
  has_one :c
end

class C
  belongs_to :b
  delegate :a, :to => :b, :allow_nil => true
end

分享到:
评论

相关推荐

    Laravel开发-relationships

    当需要一次性获取多级关联的数据时,可以使用嵌套关系。例如,获取用户及其所有帖子的所有评论,可以使用`with('posts.comments')`进行预加载,减少多次数据库查询,提高性能。 6. **聚合关系 (Aggregating ...

    Laravel开发-relaqs

    例如,如果你发现现有的关系类型无法满足特定的需求,你可以创建一个新的函数,返回一个`BelongsTo`, `HasMany`, `MorphTo`等预定义的查询构建器实例,从而构建出新的关系类型。 在“Relaqs”项目中,可能包含了...

    Laravel开发-embed-relation

    在Laravel中,你可以通过定义一个方法并返回`BelongsTo`或`HasOne`实例来建立这种关系。例如,一个`User`模型可能有一个`Profile`模型,可以定义`profile()`方法来获取或设置关联。 4. 一对多关系(One-to-Many):...

    ecto_morph:将Ecto功能转变为平流层!

    在Ecto中,关联关系(如 belongs_to, has_one, has_many 等)通常需要额外的查询来加载。`ecto_morph`通过以下方式优化了这一过程: 1. **延迟加载优化**:在默认情况下,Ecto会进行单独的查询来获取关联数据。`...

    Laravel开发-laravel-categories

    在“laravel-categories”中,可能会有一个`Category`模型,用于表示类别实体,并通过定义` belongsTo`和`hasMany`或`morphMany`等关系来处理类别间的层级关系。 2. **数据库迁移**: 使用Laravel的迁移功能可以...

    Laravel开发-nested-sets

    接着,我们需要继承`Morphs`或`BelongsTo`关系来关联父节点。例如: ```php class Category extends Model { protected $fillable = ['name', 'lft', 'rgt', 'parent_id']; public function parent() { return...

    Laravel开发-category

    8. **关联关系**:如果Category模块需要处理多级分类,可以利用Eloquent的父子关系(hasManyThrough、belongsTo或hasMany)来定义模型之间的关联。 9. **Artisan命令**:Laravel的Artisan命令行工具可以用来生成...

    APIfiltr:WDI 项目 2 的 API

    12. **嵌套评论**:可能使用递归或者关联模型实现评论的层级结构,如 Comment 模型可以有 belongs_to :post 和 has_many :comments 关联。 通过深入学习这些知识点,开发者可以了解到如何使用 Ruby 和相关框架构建...

Global site tag (gtag.js) - Google Analytics