美文网首页ruby on rails
rails模型关联(二)-自联结

rails模型关联(二)-自联结

作者: 李傲娢 | 来源:发表于2018-03-29 21:06 被阅读34次

在实际开发的时候会遇到多级分类的需求.如:商品分类.3c分类下可以包含手机、数码、mp3等二级分类,衣服分类下可以包含男装、女装、童装等二级分类,女装下可以包含上衣、裙子、春装等三级分类.为了实现这种效果,可以分类表中添加一个上下级关联id.

rails中可以同建立自联结实现这种效果.使用上次创建的Type模型做一个demo.

# app/models/type.rb
class Type < ApplicationRecord
  has_many :books
  has_many :sub_types, class_name: 'Type',
                      foreign_key: 'parent_id'
  belongs_to :parent, class_name: 'Type',
                      optional: true # 不需要验证关联的对象是否存在,顶级分类不需要上一级
end

# db/migrate/xxx_add_reference_to_type.rb
# 添加引用,在表types中生成新的字段parent_id
class AddReferenceToType < ActiveRecord::Migration[5.1]
  def change
    add_reference :types, :parent, index: true
  end
end

通过新建一个模型做一个简单的测试

t = Type.create(name: '文学')
# 插入自分类
t.sub_types.create([
  {name: '青春文学'},
  {name: '网络文学'},
  {name: '散文'},
  {name: '诗歌'}
])
t.sub_types # 获取所有的子类
Type.last.parent # 获取最后一条记录诗歌的上一级分类

相关文章

  • rails模型关联(二)-自联结

    在实际开发的时候会遇到多级分类的需求.如:商品分类.3c分类下可以包含手机、数码、mp3等二级分类,衣服分类下可以...

  • Rails的模型自关联

    关于Rails的模型自关联有一个非常有意思的题目,大概是这样的: 问如何定义Person模型来满足以上需求? 题目...

  • rails模型关联

    rails的orm很完善,可以非常方便的建立模型之间的关联.通过一些简单的代码实现一些常见的关联操作. 关联基础操...

  • [Rails] Active Record Associatio

    资料来源:Rails Guide Guide: -在模型之间构建关联-理解不同种类的关联-使用关联提供的方法 1....

  • 《Rails-Guides》Reading notes five

    Rails 支持六种关联 belongs_to关联 belongs_to关联创建两个模型之间一对一的关系,声明所...

  • Active Record关联

    在开发中常常会涉及到多个模型进行关联的操作.Rails支持六种关联: 为了后续的内容分析,事先创建以下模型 bel...

  • Rails joins & includes &

    又是一个起源于群友(154112964 rails群 欢迎使用rails的所有人)讨论的玩意 先放一些模型&关联在...

  • rails中常用gem

    软删除 acts_as_paranoid 自关联 ancestry 拖拽排序 rails_sortable 避免n...

  • Django模型-自关联

    新建模型AreaInfo,生成迁移 class AreaInfo(models.Model): atitle = ...

  • Django 2.1.7 模型管理器 models.Manage

    上一篇Django 2.1.7 模型的关联讲述了关于Django模型一对多、多对多、自关联等模型关系。 在查询数据...

网友评论

    本文标题:rails模型关联(二)-自联结

    本文链接:https://www.haomeiwen.com/subject/inpvcftx.html