rails Model 多对多关系学习

介绍: model多对多关系,有两种方法可以实现,第一种是has_and_belongs_to_many,第二种是has_many,下面分别分析一下


has_and_belongs_to_many

使用场景:一个a模型有多个b模型,b模型同样也有多个a模型

举个例子:一个博客有多个标签,一个标签也有多个博客,博客为blog模型,标签为tag模型,如何实现blog模型和tag模型的对应关系

blog模型中

has_and_belongs_to_many :tags

tag模型中

has_and_belongs_to_ many :blogs

要想要建立blog个模型和tag模型之间的关心,必须要有个对应关系表blogs_tags

表中建立字段

t.integer :blog_id

t.integer :tag_id

到这里我们已经建立了blog模型和tag模型的关系呢。



has_many

使用场景:我们需要访问关联关系表blogs_tags,并且在关联关系表blogs_tags中添加一些自定义的字段,回调,属性检查等等

举个例子:一个博客有多个标签,一个标签也有多个博客,博客为blog模型,标签为tag模型,如何实现blog模型和tag模型的对应关系

blog模型中

has_many :blogs_tags,  class_name: "BlogTag"

has_many :tags, through: :blogs_tags

tag模型中

has_ many :blogs_tags, class_name: "BlogTag"

has_many :blogs, through: :blogs_tags

blogs_tags模型中

self.table_name = "blogs_tags"

belongs_to :blog

belongs_to :tag

对应关系已经建立起来呢。


关联关系定制
使用场景:我们需要返回只有是公开状态下的数据记录
举个例子:user模型和blog模型是一对多的关系,假如blog模型中is_public属性是boolean类型的,取出一个用户对应blog模型is_public为true时的所有数据

user模型中:

has_many :public_blogs,  ->{ where(is_public: true) },  class_name: "Blog"





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值