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
未完待续