rails 练习5--将Topic与Votes做关联

来源:互联网 发布:minix3.3.0源码下载 编辑:程序博客网 时间:2024/05/17 06:02

目标

这里写图片描述

上图解释了topic与它的votes之间的关联。在本章节,我们将会把这二个Model之间的关联实作出来

步骤

步骤1:设定Model Topic里与Vote的关联

编辑app/models/topic.rb让它看起来像下面代码:

class Topic < ApplicationRecord  has_many :votes, dependent: :destroyend

步骤2:设定Model Vote里与Topic的关联

编辑app/models/vote.rb让它看起来像下面代码:

class Vote < ApplicationRecord  belongs_to :topicend

步骤3:在Rails console把玩一下Topics与Votes

首先,确认你已经建了至少一笔的topic数据

然后在终端机(位于Rails项目文件夹位置下)输入:

rails c

在Rails Console模式下,尝试下面这些操作

秀出总共有多少Topic篇数:

Topic.count

用变数来定义第一篇Topic

my_topic = Topic.first

可以把my_topic用其他任何名称代替,不过我们会用这名称来让下面操作更显得易懂

修改 title 的內容:

my_topic.update_attributes(title: 'Edited in the console'

增加一张投票数:

my_topic.votes.create

秀出总共有多少投票数

my_topic.votes.count

移除一个投票数

my_topic.votes.first.destroy

下面的附表列出你可以使用的Model classes方法(像是Topic and Vote),以及跟前者有些不同的Model instances方法(像是刚刚操作的my_topic等指令)。my_topic.votes这个指令是属于association分类,其方法跟Model classes雷同

这里写图片描述

解说

has_many与belongs_to:

  • 在Rails里,二个Model设定之间的关系称之为『Associations』(关联)
  • Associations(通常)都是成对的,意思是有has,就有belongs
  • Topic会有很多的votes,所以我们在topic model里面放入has_many:votes
    • 当你跟topic instance呼叫它所拥有的votes,会得到所有该topic的votes(用array包起来的)
  • 某一个vote是属于特定topic的一部份,所以我们在vote model放入belongs_to:topic

    • 当你跟vote instance呼叫它所属于的topic,就会得到该topic instance的数据

has_many:votes后面接出来的dependent::destroy很重要!代表该topic instance被删除时,它所拥有的votes也会一并删掉。如果没有dependent::destroy这个设定,那些votes的数据将永远存在数据库里面,变成孤儿数据(因为找不到它所属于的topic)

0 0
原创粉丝点击