RoR框架下基于Active Record的Model关联

Active Record Associations:http://guides.rubyonrails.org/association_basics.html

1. belongs_to关联

新建Customer和Order2个model,然后生成表。

$ rails generate model Customer name:string
$ rake db:migrate

$ rails generate model Order customer:references order_date:datetime
$ rake db:migrate

customer.rb

class Customer < ActiveRecord::Base
end
order.rb

class Order < ActiveRecord::Base
  belongs_to :customer
end

测试代码:

=begin    
    @order = Order.new
    @order.order_date = Time.now
    @customer = @order.create_customer(:name => 'LiftDNA')
    @order.save
=end

=begin
    @order = Order.new
    @order.order_date = Time.now
    @customer = @order.build_customer(:name => 'LiftDNA')
    @order.save
=end

=begin
    @customer = Customer.new
    @customer.name = 'LiftDNA'
    @order = Order.new
    @order.order_date = Time.now
    @order.customer = @customer
    @order.save
=end
    
    @order = Order.find(3)
    @customer = @order.customer

2. has_many关联

修改model:customer.rb

class Customer < ActiveRecord::Base
  has_many :orders
end
这样可以通过如下方法从customer向order关联

@customer = Customer.find(3)
@orders = @customer.orders

显示在页面上

<%=
	@orders.map { |o| o.id }
%>

3. has_many :through关联

patient.rb

class Appointment < ActiveRecord::Base
  belongs_to :physician
  belongs_to :patient
end
physician.rb
class Physician < ActiveRecord::Base
  has_many :appointments
  has_many :patients, :through => :appointments
end
appointment.rb
class Appointment < ActiveRecord::Base
  belongs_to :physician
  belongs_to :patient
end
测试代码:

    @physicians = Physician.new
    @physicians.name = 'B3'
    @physicians.save
    @patients = Patient.new
    @patients.name = 'A2'
    @patients.physicians = [@physicians]
    @patients.save

未完待续

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值