我正在尝试添加一个简单的库存管理系统。一个类产品有_许多变体,并且变体属于_一个产品,因此有一个product_id,以及一个名称和一个数量。当用户创建产品时,我通过调用以下命令让产品生成 11 个不同的变体(仅使用数值)
Located in variants.rb (model)
def self.create_multiple_variants( product_id )
p = Product.find(product_id)
i = 11
while i <= 21
new_variant = Variants.create
new_variant.product = p
new_variant.name = (i*2)
new_variant.qty = 0
i += 1
end
end
然后当用户尝试显示页面时,程序将检查属于产品的每个变体,看看它们是否有任何数量(管理员会在此过程中调整),如下所示:
位于视图中:
<div class="size"><br/>Size: <%= f.select(:size, @sizes_availiable, :prompt => "Select a Size...")
位于 product_controller 中:
@sizes_availiable = Variants.create_inventory_array( @product.id )
位于variants.rb(模型)
def self.create_inventory_array( product_id )
p = Product.find(product_id)
a = []
p.variants.each do |v|
a << variant.name if variant.qty > 0
end
a
end
我知道命名有点令人困惑,因为我将它设置为更大但现在不推荐使用它,很抱歉这有点令人困惑。现在您可以将变体视为“大小”
但是它的创建部分工作正常,但是当我去展示产品时,我收到了这条消息:
ProductController 中的名称错误#show
app/models/variants.rb:20:in
create_inventory_array' app/controllers/product_controller.rb:18:in
show'
我假设我建立关系的方式是问题的根源,无论是那个还是我如何称呼它。有任何想法吗?
更新:
我使用了下面的建议,现在看来问题出在第二个功能上。这是我的新 variables.rb 和我得到的错误:
class Variants < ActiveRecord::Base
attr_accessible :product_id, :name, :qty
belongs_to :product
def self.create_multiple_variants( product_id )
p = Product.find(product_id)
for i in 11..21
v = Variants.create
v.product = p
v.name = (i*2)
v.qty = 0
v.save!
end
end
def self.create_inventory_array( product_id )
p = Product.find(product_id)
a = []
p.variants.each do |variant|
a << variant.name if variant.qty > 0
end
a
end
end
NoMethodError in ProductController#create
undefined method `Variants' for #<Product:0x007fe9561ad550>
Application Trace | Framework Trace | Full Trace
app/models/variants.rb:8:in `block in create_multiple_variants'
app/models/variants.rb:7:in `each' app/models/variants.rb:7:in
`create_multiple_variants' app/controllers/product_controller.rb:33:in
`create
我仍然认为这是如何建立关系的问题(我正在分配variants.product = current_product,但我称之为product.variants - 我觉得关系不是双向建立的)