多對多關聯


接續 一對多關聯 的內容,如果一個客戶擁有多個訂單,訂單是關於某項產品,如果設計上,想讓讓客戶與產品間形成多對多雙向關聯,可以如下定義:

# app/models/customer.rb
class Customer < ActiveRecord::Base
    has_many :orders
    has_many :products, :through => :orders
end

# app/models/order.rb
class Order < ActiveRecord::Base
    belongs_to :user
    belongs_to :products
end


# app/models/product.rb
class Product < ActiveRecord::Base
    has_many :orders
    has_many :customers, :through => :orders
end

此時表格上必須有以下的關係:

ManyToMany

以上的情況,設計需求上也許本來就包括了Order模型,另一種多對多關係,是不需要中介模型存在的情況,例如一個使用者會使用多台電腦,而一台電腦會有多個使用者,模型設計上也許只需要:

# app/models/user.rb
class User < ActiveRecord::Base
    has_and_belongs_to_many :servers
end

# app/models/server.rb
class Server < ActiveRecord::Base
    has_and_belongs_to_many :users
end