2017-05-27 53 views
0

我有3个表:协会在轨道3个表

Product   Purshase  Supplier 
supplier_id  product_id  name 

这是相关机型:

class Purshase < ActiveRecord::Base 
    belongs_to :product 
end 

class Product < ActiveRecord::Base 
    has_many :supplier 
    has_many :purshase 
end 

class Supplier < ActiveRecord::Base 
    belongs_to :product 
end 

我想表明这种方式在我看来:purchase.product.supplier.name

+0

我假设'Purshase'和'purshase'确实是'Purchase'和'purchase',对吗? – Gerry

回答

0

如果你想以这种方式显示供应商名称(purchase.product.supplier.name),那么你应该改变你的模型关联有点像这样

class Purshase < ActiveRecord::Base 
    belongs_to :product 
end 

class Product < ActiveRecord::Base 
    belongs_to :supplier 
    has_many :purshases 
end 

class Supplier < ActiveRecord::Base 
    has_many :products 
end 

现在您可以在您的视图中通过purchase.product.supplier.name获取您的供应商名称。

0

记住,belongs_to关系在哪个表包含外键的模型中使用,并且has_many关系在其他模型中,一个没有任何外键。

考虑到这一点,你需要改变你的Supplier/Product关系:一个Supplierhas_many产品和Productbelongs_to供应商:

class Purchase < ApplicationRecord 
    belongs_to :product 
end 

class Product < ApplicationRecord 
    belongs_to :supplier 
    has_many :purchases 
end 

class Supplier < ApplicationRecord 
    has_many :products 
end 

你可以阅读更多有关rails guides关联。

0

根据您的描述,有一种情况是产品可能有许多供应商,供应商可能有许多产品。 我建议你创建一个名为ProductSupplier像一个中间模型:

class ProductSupplier < ActiveRecord::Base 
    belongs_to :supplier 
    belongs_to :purchase 
end 

的的has_many添加到这两个产品和供应商。

型号产品:

has_many :product_suppliers, :dependent => :destroy 
has_many :suppliers, :through => :product_suppliers 

型号供应商:

has_many :product_suppliers, :dependent => :destroy 
has_many :products, :through => :product_suppliers 

您可以通过创建ProductSupplier记录建立产品和供应商之间的关系。