我有类似的问题,如 this old one与在 Rails 7 中使用命名空间模型固定装置进行 has_one-belongs_to 关联相关。
关于 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: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c4a2abab84a6a5b6eaa7aba9" rel="noreferrer noopener nofollow">[email protected]</a>
...
bar:
id: 2
name: Bar
email: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a9cbc8dbe9cfc6c687cac6c4" rel="noreferrer noopener nofollow">[email protected]</a>
...
但是,我在为 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: table "users" has no columns named "user_id"/"user".
在用户装置中,我也尝试使用以下内容,但出现相同的 Minitest 错误:
# test/fixtures/users.yml
foo:
id: 1
name: Foo
email: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3d5b52527d5f5c4f135e5250" rel="noreferrer noopener nofollow">[email protected]</a>
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 的工作装置?
最佳答案
找到解决方案:
- 在 test/test_helper.rb 中,我添加了
set_fixture_class :users_settings => Users::Setting
测试/test_helper.rb
class ActiveSupport::TestCase
...
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
# Namespaced models/fixtures
set_fixture_class :users_settings => Users::Setting
...
end
- (重新)将包含固定语句的文件命名为users_settings.yml
- 在 test/fixtures/users_settings.yml 中找到文件 users_settings.yml
关于ruby-on-rails - 如何在 Rails 7 Minitest 中设置命名空间模型装置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75796603/