initialize_with factory_girl 的参数数量错误

wrong number of arguments for initialize_with factory_girl

我有这个工厂代码:

FactoryGirl.define do
  factory :cost_group, class: CostGroup do
    transient do
      user_id     nil
      cost_object   nil
    end

    initialize_with { new(attributes) }
  end
end

这是我的 class:

class CostGroup
  attr_reader :user_id, :cost_object

  def initialize(user_id, cost_object, data = {})
    ...
  end
end

但我在 运行 规范时遇到错误。

let(:u) {build(:user)}
let(:cost) {build(:cost)}
let(:cost_group) { build(:cost_group, user_id: u.id, cost_object: cost) }

结果为:wrong number of arguments (1 for 2..3) on initialize。为什么这会在我传递参数时显示此错误消息?为什么不是 0 而是 1?我传递的所有内容是否都被分组到 1 个参数?

主要是因为initialize_with { new(attributes) }因为attributes这里是一个散列

您需要手动制作 initialize_with { new(user_id, cost_object) }