1

我做了一个简单的库存系统,想在购买产品之前显示一个选择器来选择尺寸。我希望选择器只显示有库存的商品,不允许用户选择没有库存的商品。我这样做是为了在创建产品时创建一组变体,包括它们的名称和数量。因此,当我创建产品时,它会创建 3 个变体,分别命名为 Small、Medium 和 Large,每个变体的数量为 0。我使用 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

产品.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 中删除了 unless 语句(这违背了目的),因此该方法如下所示,列表中填充了小型和大型:

产品.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

关于为什么除非语句引起问题的任何想法?

4

1 回答 1

2

您正在使用=而不是==. var.qty = 0将始终在 Ruby 中测试为“真”,但不幸的副作用是清除您尝试测试的数据。将其更改为var.qty == 0,您应该没问题。

于 2013-01-27T22:58:50.210 回答