具有多态关联和可接受的嵌套属性的factorygirl验证失败

克里斯·霍夫

我有一个非常简单的多边形关联设置。我正在尝试验证令牌仅存在于提供者或商店中,而不同时存在于两者中。当我使用撬动时,这些验证可以正常工作,但是,我的重构使工厂感到厌烦。

问题

如果使用令牌(即FactoryGirl.create(:shop,:with_authentication_token))创建商店,那么它会爆炸,因为无法像FG尝试处理商店那样创建和保存商店?谁能指出正确的方向来设置商店工厂?

错误

ActiveRecord::RecordInvalid: Validation failed: Owner can't be blank

现在,提供者工厂可以工作,因为它是父工厂。

在PRY工作?

shop = FactoryGirl.build(:shop)
shop.authentication_token_attributes = { token: 'test', owner: shop }
shop.save

桌子

  create_table "authentication_tokens", force: :cascade do |t|
    t.string   "token",      limit: 255, null: false
    t.datetime "created_at",             null: false
    t.datetime "updated_at",             null: false
    t.integer  "owner_id",   limit: 4,   null: false
    t.string   "owner_type", limit: 255, null: false
  end

工厂工厂

FactoryGirl.define do
  factory :shop do
    provider
    ...

    trait :with_authentication_token do
      before(:create) do |shop|
        create(:authentication_token, owner: shop)
      end
      after(:build) do |shop|
        build(:authentication_token, owner: shop)
      end
    end

    trait :inactive do
      active { false }
    end
  end
end

楷模

class Shop < ActiveRecord::Base
  belongs_to :provider
  has_one :authentication_token, as: :owner, dependent: :destroy

  accepts_nested_attributes_for(:authentication_token, update_only: true)

  ...

  validates :authentication_token, presence: true, if: :shop_is_owner?

  ...

  private

  def shop_is_owner?
    return false if provider.authentication_token
    true
  end
end

class Provider < ActiveRecord::Base
  ...

  has_many :shops
  has_one :authentication_token, as: :owner, dependent: :destroy

  ...

  accepts_nested_attributes_for(:authentication_token, update_only: true)

end


class AuthenticationToken < ActiveRecord::Base
  belongs_to :owner, polymorphic: true

  validates :token,
            length: { maximum: 245 },
            presence: true,
            uniqueness: true

  validates :owner, presence: true

  validate :unique_auth_token

  def shop
    return owner if owner_type == 'Shop'
  end

  def provider
    return owner if owner_type == 'Provider'
  end

  private

  def unique_auth_token
    errors.add(:base, I18n.t('activerecord.errors.models.shop.no_auth_token_sharing')) if shop && shop.provider.authentication_token
  end
end
迪斯

因此您无法在实例化和关联模型之前触发任何一个模型的保存

trait :with_authentication_token do
  before(:create) do |shop|
    create(:authentication_token, owner: shop)
  end
  after(:build) do |shop|
    build(:authentication_token, owner: shop)
  end
end

改成

trait :with_authentication_token do
  before(:create) do |shop|
    shop.authentication_token = build(:authentication_token, owner: shop)
  end
  after(:build) do |shop|
    shop.authentication_token = build(:authentication_token, owner: shop)
  end
end

我认为应该工作

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用嵌套属性和多态关联的用户验证失败

来自分类Dev

如何查找在has_many关联上具有嵌套属性的验证失败的记录?

来自分类Dev

带有嵌套资源和关联的FactoryGirl对象的Controller的RSpec测试失败

来自分类Dev

如何为具有嵌套属性的多态模型保存一个longate_to关联?

来自分类Dev

注释系统:具有正常关联的Hstore VS具有多态关联的简单属性

来自分类Dev

使用Cocoon进行多态关联的验证失败

来自分类Dev

具有多态关联的过滤和求和模型

来自分类Dev

BeautifulSoup find_all()查找具有几个可接受属性值之一的元素

来自分类Dev

无法使用具有可接受的转换类型的值来设置对象的属性

来自分类Dev

Rails 4-多态关联-嵌套属性

来自分类Dev

如何部署具有已知(和可接受的)数据丢失的DACPAC版本

来自分类Dev

与FactoryGirl建立多态关联的记录

来自分类Dev

与FactoryGirl建立多态关联的记录

来自分类Dev

FactoryGirl并获取具有所有关联的属性哈希

来自分类Dev

FactoryGirl Emirates_to关联的唯一性验证失败

来自分类Dev

XML和XSD验证失败:元素同时具有“类型”属性和“匿名类型”子元素

来自分类Dev

Robot Framework - 定位具有接受属性的输入元素失败

来自分类Dev

如何只为一个具有多态关联的模型指定验证?

来自分类Dev

具有嵌套属性创建的模型更改了before_validation和before_save之间的关联类型属性

来自分类Dev

具有多个关联的多态关系

来自分类Dev

具有多态关联的多个内部联接

来自分类Dev

具有多态关联的ActiveRocord查询

来自分类Dev

mypy是否具有子类可接受的返回类型?

来自分类Dev

承诺所有语法和可接受的操作框架

来自分类Dev

使用Rails 4以简单的形式设计多态关联嵌套属性

来自分类Dev

具有has_many和has_one的多态关联的Factory Girl

来自分类Dev

xml验证失败,具有必需的属性和不允许的属性错误,这是模棱两可的

来自分类Dev

具有多个关联的RSpec / FactoryGirl中的“名称已被使用”

来自分类Dev

具有自己的属性和关联对象ID的Rails ActiveRecords

Related 相关文章

  1. 1

    使用嵌套属性和多态关联的用户验证失败

  2. 2

    如何查找在has_many关联上具有嵌套属性的验证失败的记录?

  3. 3

    带有嵌套资源和关联的FactoryGirl对象的Controller的RSpec测试失败

  4. 4

    如何为具有嵌套属性的多态模型保存一个longate_to关联?

  5. 5

    注释系统:具有正常关联的Hstore VS具有多态关联的简单属性

  6. 6

    使用Cocoon进行多态关联的验证失败

  7. 7

    具有多态关联的过滤和求和模型

  8. 8

    BeautifulSoup find_all()查找具有几个可接受属性值之一的元素

  9. 9

    无法使用具有可接受的转换类型的值来设置对象的属性

  10. 10

    Rails 4-多态关联-嵌套属性

  11. 11

    如何部署具有已知(和可接受的)数据丢失的DACPAC版本

  12. 12

    与FactoryGirl建立多态关联的记录

  13. 13

    与FactoryGirl建立多态关联的记录

  14. 14

    FactoryGirl并获取具有所有关联的属性哈希

  15. 15

    FactoryGirl Emirates_to关联的唯一性验证失败

  16. 16

    XML和XSD验证失败:元素同时具有“类型”属性和“匿名类型”子元素

  17. 17

    Robot Framework - 定位具有接受属性的输入元素失败

  18. 18

    如何只为一个具有多态关联的模型指定验证?

  19. 19

    具有嵌套属性创建的模型更改了before_validation和before_save之间的关联类型属性

  20. 20

    具有多个关联的多态关系

  21. 21

    具有多态关联的多个内部联接

  22. 22

    具有多态关联的ActiveRocord查询

  23. 23

    mypy是否具有子类可接受的返回类型?

  24. 24

    承诺所有语法和可接受的操作框架

  25. 25

    使用Rails 4以简单的形式设计多态关联嵌套属性

  26. 26

    具有has_many和has_one的多态关联的Factory Girl

  27. 27

    xml验证失败,具有必需的属性和不允许的属性错误,这是模棱两可的

  28. 28

    具有多个关联的RSpec / FactoryGirl中的“名称已被使用”

  29. 29

    具有自己的属性和关联对象ID的Rails ActiveRecords

热门标签

归档