(01)指定外键+多对多关联

构造案例

创建项目

rails _4.2.2_ new active_record_second -d=mysql

修改Gemfile文件,把gem源替换为source 'https://gems.ruby-china.org',把gem 'mysql2'替换为gem 'mysql2', '~> 0.3.18'
把database.yml文件里面的数据库密码设置为本地mysql数据库的密码

cd  active_record_second
bundle install
rake  db:create

构造数据

A表和B表的多对多关系是需要通过中间表C,表C保存两个表的外键。而A表和B表则保持原有结构即可,不需要添加C表的外键。

首先需要products表的数据,我们直接在navicat里面像复制文件一样,用ctrl+c和ctrl+v的方式把products表复制到active_record_second_development数据库就行

rails g migration CreateActivityFloors
rails g migration CreateActivityFloorProducts
(01)指定外键+多对多关联_第1张图片

(01)指定外键+多对多关联_第2张图片
rake db:migrate

添加模型文件


(01)指定外键+多对多关联_第3张图片

(01)指定外键+多对多关联_第4张图片

(01)指定外键+多对多关联_第5张图片

迁移文件里面像t.string :ID, limit: 36, primary: true, null: false这样给字段设置为主键是不报错但是不生效的,于是我们通过navicat把表中ID字段都设置为主键。

填充数据
一个楼层下面有多个商品,一个商品有多个楼层(这里我们p1商品同时属于3个楼层)


(01)指定外键+多对多关联_第6张图片

(01)指定外键+多对多关联_第7张图片

(01)指定外键+多对多关联_第8张图片

rails c下检验关联关系

  • 一个楼层对应多个商品


    (01)指定外键+多对多关联_第9张图片
  • 一个商品可以属于多个楼层


    (01)指定外键+多对多关联_第10张图片

关联时自己指定外键

我们给活动楼层再加个1对多关联,一个顶部活动下面有多个活动楼层

rails g migration CreateTopActivities
(01)指定外键+多对多关联_第11张图片
rake db:migrate
rails g migration AddTopIdToActivityFloors
(01)指定外键+多对多关联_第12张图片
rake  db:migrate

如上,我们给activity_floor指定外键,不一定非要按默认约定命名为TopActivityID,我们添加外键为TopID

  • 修改和填充数据


    (01)指定外键+多对多关联_第13张图片
(01)指定外键+多对多关联_第14张图片
  • 添加模型文件和模型关联


    (01)指定外键+多对多关联_第15张图片

    (01)指定外键+多对多关联_第16张图片
  • 使用指定外键,在rails c下试验说明关联成功


    (01)指定外键+多对多关联_第17张图片

使用Git做版本控制

进入项目根目录

.../active_record_second#  git init
Initialized empty Git repository in /home/**********/active_record_second/.git/
git add -A
git commit -m "ActiveRecordSecond"

然后创建一个git仓库


提交

git push -u https://github.com/xiaohuacc/active_record_second.git master

你可能感兴趣的:((01)指定外键+多对多关联)