我有一个这样的模型:
class Sale < ActiveRecord::Base
has_many :sale_items
我正在保存sale_item中的每件商品。
在某些情况下,没有保存sale_item,我得到了:
sale.sale_items = create_sale_items
但是从函数返回的值类似于[nil, nil, nil]
它会抛出错误SaleItem(#70332578775280) expected, got NilClass(#70332514236280)
我怎样才能克服这个问题?
我的create_sale_items是sale_items_form
表示保存每个项目的表单的地方
def create_sale_items
sale_items_form.map do |sale_item|
sale_item if sale_item.valid?
end
end
由于
答案 0 :(得分:1)
所以你的问题是create_sale_items
方法为sale_items_form
中的每个元素返回一个值,无论如何。实际上,如果值无效,则返回nil
,这没有意义。
为了只返回有效值,您可能希望在块中使用select
而不是相同的条件。
def create_sale_items
sale_items_form.select {|sale_item| sale_item.valid? }
end
答案 1 :(得分:0)
由于某种原因,您的sale_item
无效,因此对于每个无效项,此代码都会返回nil。检查您的商品是否有效。
def create_sale_items
sale_items_form.map do |sale_item|
sale_item if sale_item.valid? # else nil !!!
end
end
另外,对于其他人,您应该使用.select
代替.map
来过滤有效项目。