我有一个类似的问题,比如this old one related to using namespaced model fixtures for a has_one-belongs_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
class Users::Setting < ApplicationRecord
belongs_to :user, :class_name => 'User', :foreign_key => 'user_id'
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) # <<<
...
我也试过像这样编辑 test/test_helper.rb 文件,但我得到了同样的 Minitest 错误:
class ActiveSupport::TestCase
fixtures :all
set_fixture_class 'users/settings' => Users::Setting
end
在 test/integration/user_flows_test.rb 我有:
# test/integration/user_flows_test.rb
require "test_helper"
class UserFlowsTest < ActionDispatch::IntegrationTest
fixtures :users
test "can something" do
user = users(:foo)
...
end
end
如何为命名空间的 Users::Setting 声明工作装置?