シンプルな在庫管理システムを追加しようとしています。クラス製品には多くのバリエーションがあり、バリエーションは製品に属しているため、名前と数量に加えて、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
私はそれをより大きなものとして設定していますが、今のところ非推奨にしているので、命名が少し混乱していることを知っています。少し混乱して申し訳ありません。今のところ、バリアントは「サイズ」と考えることができます
ただし、作成部分は正常に機能しますが、製品を表示すると、次のメッセージが表示されます。
NameError in ProductController#show
app/models/variants.rb:20:in
create_inventory_array' app/controllers/product_controller.rb:18:in
show'
私が関係を構築している方法が問題の原因であると思います。何か案は?
アップデート:
以下の提案を使用しましたが、問題は 2 番目の関数にあるようです。ここに私の新しい variants.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 を呼び出します - 私は関係が両方の方法で構築されていないように感じます)