如何在 Rails 7 Minitest 中设置命名空间固定装置?

问题描述 投票:0回答:1

我有一个类似的问题,比如this old one related to using namespaced fixtures for a has_one/belong_to association in Rails 7.

关于 ActiveRecord,在我的模型文件中我有:

# app/models/user.rb
class User < ApplicationRecord
  has_one :setting, :class_name  => 'Users::Setting', :foreign_key => 'user_id'
end

# app/models/users/setting.rb
module Users
  class Setting < ApplicationRecord
    belongs_to :user, :class_name  => 'User', :foreign_key => 'user_id'
  end
end

# app/models/users.rb
module Users
  def self.table_name_prefix
    'users_'
  end
end

关于固定装置,在我创建并成功使用以下用户模型的 test/fixtures/users.yml 文件中:

# test/fixtures/users.yml

foo:
  id: 1
  name: Foo
  email: [email protected]
  ...

bar:
  id: 2
  name: Bar
  email: [email protected]
  ...

但是我在为 Users::Setting 模型设置固定装置时遇到了麻烦。我尝试创建 test/fixtures/users/settings.yml 文件并使用以下内容但没有成功:

# test/fixtures/users/settings.yml

_fixture:
  model_class: Users::Setting

foo_setting:
  id: 1
  user_id: 1
  ...

# foo_setting:
#   id: 1
#   user: foo
#   ...

当我运行测试时,出现如下错误:

Minitest::UnexpectedError: ActiveRecord::Fixture::FixtureError: 表 “用户”没有名为“user_id”/“用户”的列。

在用户固定装置中,我也尝试使用以下但我得到相同的 Minitest 错误:

# test/fixtures/users.yml

foo:
  id: 1
  name: Foo
  email: [email protected]
  setting: foo_setting (Users:Setting) # <<<
  ...

如何为命名空间的 Users::Setting 声明工作装置?

ruby-on-rails testing namespaces fixtures minitest
1个回答
0
投票

您为命名空间的 Users::Setting 模型构建固定装置的方式似乎存在问题。以下是解决此问题的方法:

在您的 test/fixtures/users/settings.yml 文件中,您不需要指定 _fixture 块,因为 Rails 会根据命名空间文件位置推断出正确的模型。像这样定义你的固定装置:

# test/fixtures/users/settings.yml

foo_setting:
  id: 1
  user_id: 1
  # ... other attributes

bar_setting:
  id: 2
  user_id: 2
  # ... other attributes

在你的test/fixtures/users.yml文件中,你可以通过fixture标签指定User和Users::Setting模型之间的关联。像这样更新您的 users.yml:

# test/fixtures/users.yml

foo:
  id: 1
  name: Foo
  email: [email protected]
  setting: foo_setting
  # ... other attributes

bar:
  id: 2
  name: Bar
  email: [email protected]
  setting: bar_setting
  # ... other attributes

现在,当您运行测试时,Rails 应该正确关联 User 和 Users::Setting fixture,并且您不应该遇到“表‘users’没有名为‘user_id’/‘user’的列”错误。

© www.soinside.com 2019 - 2024. All rights reserved.