这里主要讲流程,不会涉及到具体的代码,最近开始学习ruby,所以想写一些东西来记录一下。
按照官方文档上面,我们有一个Customer和Order这两个active record,他们的关系是一对多的关系,一个customer可以拥有多个order,但是一个order只能隶属于一个customer。
首先我们执行
rails g model Customer
rails g model Order
前面两句话的意思是说创建两个model,这个时候,这两个对象是没有任何关系的,我们需要为他们创建关系,修改刚才命令行创建的文件,#####_create_orders.rb
class CreateOrders < ActiveRecord::Migration
def change
a create_table :orders do |t|
t.belongs_to :customer
t.timestamps null: false
end
end
end
然后我们再来看看Customer文件
class CreateCustomers < ActiveRecord::Migration
def change
create_table :customers do |t|
t.timestamps null: false
end
end
end
到此,数据库层面的关系就已经建立好了,然后执行
rake db:migrate
去更新到数据库,关于rails数据迁移方面的问题,我后面的博客会涉及到,这里就暂时不详说了。
注意光有数据库上面的关系是不够的,我们还需要在model层创建他们的关系,这就像是hibernate,你在database里面首先要定义表的关系,然后再在hibernate的配置文件里面加上他们的关系(题外话,虽然我是搞java的)。直接看model的代码
class Order < ActiveRecord::Base
belongs_to :customer
end
class Customer < ActiveRecord::Base
has_many :orders, dependent: :destroy
end
通过上面的代码,就可以完全建立好了他们的关系。
require 'test_helper'
class CustomerTest < ActiveSupport::TestCase
customer = Customer.find(1)
order = customer.orders.create(description: '1234567')
order.save
end
运行这段代码,就可以级联的操作了。