我在if
语句中声明了一个变量,该变量在该范围之外不存在。
def calculate_concurrent_product_quantity(other_job_with_product, job_product)
other_job_with_product.job_products.map do |prod|
if prod.product_id == job_product.product_id
@stuff = prod
raise
end
@stuff #here it equals nil?!
end
end
如果我在此处引发方法,变量@stuff
在if
语句中保存正确的值。
@stuff
#=> #<JobProduct id: 380, job_id: 90, product_id: 363, quantity: 2, frozen_cache: {}, created_at: "2014-08-14 13:18:02", updated_at: "2014-08-14 13:18:02">
但除此之外的任何东西都不起作用。为什么会这样?我尝试使用select
方法而不是像这样做,但是我得到一个错误,说方法是私有的。
答案 0 :(得分:1)
首先,应该是:
@stuff = other_job_with_product.job_products.find {|prod| prod.product_id == job_product.product_id}
您描述的行为的最可能原因是您处于循环中。 @stuff
仅为匹配元素分配值,并且在此之前不会分配。当你提出评论的位置时,你总是在循环的第一次迭代中提高,当@stuff
可能仍为零时。只有在找到并分配if
时才会提升@stuff
内部。