我制作了一个简单的库存系统,并希望在购买产品之前显示一个选择器来选择尺寸。我希望选择器只显示库存中的项目,而不允许用户选择不存在的项目。我这样做是为了在创建产品时创建一组变量,包括它们的名称和数量。因此,当我创建一个产品时,它会创建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
有关为什么除非声明导致问题的任何想法?
答案 0 :(得分:2)
您使用=
代替==
。 var.qty = 0
将始终在Ruby中测试为“true”,并且会消除您尝试测试的数据的不幸副作用。将其更改为var.qty == 0
,您应该没问题。