2

我有模型类别,它具有并属于许多包。当用户在类别中创建发布时,它必须属于其类别中的包。

这是自定义验证器的代码:

class PackageValidator < ActiveModel::Validator
  def validate(record)
    record.errors[:package_id] <<
      I18n.t('errors.messages.package.not_in_category') unless
      record.category.packages.include? record.package
  end
end

这很好用,但它打破了我所有的 rspec 测试(使用 factory_girl),因为 factory_girl 为每个类别创建一个新包,并用它构建/创建发布。

这是我的工厂:

factory :category do
  sequence(:name) {|n| "Parts#{n}"}
  sequence(:slug) {|n| "parts#{n}"}
  packages {[FactoryGirl.create(:package)]}
end

factory :posting do
  title 'Foo'
  body 'Bar'
  category
  package
end

factory :package do
  sequence(:name) {|n| "Basic#{n}"
  price 0
  photos 5
end

我怎样才能让它们一起很好地发挥作用?

4

1 回答 1

0

您可以将包设置为category.packages.first挂钩after(:build)

于 2012-12-30T01:33:36.633 回答