根据库存水平构建阵列

时间:2013-01-27 22:50:31

标签: ruby-on-rails ruby

我制作了一个简单的库存系统,并希望在购买产品之前显示一个选择器来选择尺寸。我希望选择器只显示库存中的项目,而不允许用户选择不存在的项目。我这样做是为了在创建产品时创建一组变量,包括它们的名称和数量。因此,当我创建一个产品时,它会创建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

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中删除除非声明(这违背了目的),所以方法如下所示,列表中填充了大中小:

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

有关为什么除非声明导致问题的任何想法?

1 个答案:

答案 0 :(得分:2)

您使用=代替==var.qty = 0将始终在Ruby中测试为“true”,并且会消除您尝试测试的数据的不幸副作用。将其更改为var.qty == 0,您应该没问题。