如何从NilClass错误中克服AssociationTypeMismatch?

时间:2014-03-06 22:52:50

标签: ruby-on-rails ruby

我有一个这样的模型:

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

由于

2 个答案:

答案 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来过滤有效项目。