我有三个模型
class SupplierVariant
belongs_to :supplier
belongs_to :variant
end
class Supplier
has_many :variants, :through :supplier_variants
end
class Variant
end
现在我想知道,如何获得特定变体的供应商。我添加了一个关联变型类中的has_one :supplier through: :supplier_variant
但是当我执行以下查询时,我得到下面提到的错误
p=Spree::Variant.find(384)
Spree::Variant Load (1.2ms) SELECT "spree_variants".* FROM "spree_variants" WHERE "spree_variants"."deleted_at" IS NULL AND "spree_variants"."id" = ? LIMIT 1 [["id", 384]]
=> #<Spree::Variant id: 384, sku: "CHG137-Blue-XL", weight: #<BigDecimal:a396b38,'0.5E3',9(27)>, height: #<BigDecimal:a396a20,'0.5E2',9(27)>, width: #<BigDecimal:a3968e0,'0.45E2',9(27)>, depth: #<BigDecimal:a396778,'0.75E2',9(27)>, deleted_at: nil, is_master: false, product_id: 228, cost_price: #<BigDecimal:a3962c8,'0.9E3',9(27)>, position: 4, cost_currency: "INR", track_inventory: true, tax_category_id: 3, updated_at: "2015-05-25 05:58:19", stock_items_count: 4>
p.supplier
**NoMethodError: undefined method `supplier' for #<Spree::Variant:0x0000000a3973a8>**
如何在rails模型文件夹中添加适当的关联?以及添加后如何使用它们?表之间的连接操作依赖于我们在模型中定义的关联吗?
您需要添加适当的关联到您的Variant
类,例如has_many :suppliers, :through :supplier_variants
。现在它只是一个没有方法的空类,因此出现了未定义方法错误。
class SupplierVariant
belongs_to :supplier
belongs_to :variant
end
class Supplier
has_many :supplier_variants
has_many :variants, :through :supplier_variants
end
class Variant
has_many :supplier_variants
has_many :suppliers, :through :supplier_variants
end
纠正这些模型的关联
@variant = Variant.last
@suppliers = @variant.suppliers
它会给你特定的变种的供应商。