1

単純な在庫システムを作成しました。製品を購入する前にサイズを選択するためのセレクターを表示したいと考えています。セレクターに在庫のあるアイテムのみを表示し、ユーザーが在庫のないアイテムを選択できないようにします。製品が作成されると、名前と数量を含む一連のバリエーションが作成されるようにしました。したがって、製品を作成すると、それぞれ数量が 0 の Small、Medium、Large という名前の 3 つのバリアントが作成されます。Ruby コンソールを使用して各バリアントの数量を更新し、以下が機能するようにしました。

ビュー/製品/show.html.erb

<div class="size"><br/>Size: <%= f.select(:size, options_for_select(@sizes_availiable), :prompt => "Select a size") %></div>

product_controller.rb

  def show
    @product = Product.find(params[:id])
    @sizes_availiable = Product.build_size_enum( @product.id )
  end

Product.rd

  def self.build_size_enum(product_id)
    p = Product.find(product_id)
    a = []
    p.variants.each do |var|
      unless var.qty = 0
        a << var.name
      end
    end
    a
  end

ただし、オプションは空です(オプション「サイズを選択」のみ)。Product.rb から (目的に反する) ステートメントを削除すると、メソッドは以下のようになり、リストには small medium と large が取り込まれます。

Product.rd

  def self.build_size_enum(product_id)
    p = Product.find(product_id)
    a = []
    p.variants.each do |var|
      a << var.name
    end
    a
  end

until ステートメントが問題を引き起こしている理由について何か考えはありますか?

4

1 に答える 1

2

=の代わりに使用してい==ます。var.qty = 0Ruby では常に「true」としてテストされますが、テストしようとしているデータが消去されるという不幸な副作用があります。それをに変更するとvar.qty == 0、問題ないはずです。

于 2013-01-27T22:58:50.210 に答える