rails 3表中的关联

时间:2017-05-27 00:18:57

标签: ruby-on-rails

我有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

3 个答案:

答案 0 :(得分: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获取供应商名称。

答案 1 :(得分:0)

请记住,模型中使用belongs_to关系,哪个表包含外键,has_many关系在另一个模型中,没有任何外键。

考虑到这一点,您需要更改Supplier / Product关系:Supplier has_many个产品和Product belongs_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中了解有关关联的更多信息。

答案 2 :(得分: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记录来建立产品和供应商之间的关系。