has_one 关系的集成测试失败

Integration test for has_one relationship failing

我在用户和组织之间有关系:

User migration file:     t.references :organization, index: true, foreign_key: true
                         t.string :xml_file, null: false
User model file:         belongs_to :organization
Organization model file: has_one :user

用户模型包含一个变量xml_file,这是一个存储在某处的文件(尚未编写该控制器方法)。我正在尝试编写集成测试:

def setup
  emptymap = fixture_file_upload('test/fixtures/empty.xml', 'application/xml', :binary)  # I have uploaded this file in the fixtures directory.
  @organization = organizations(:one)  # Which is in the organizations fixtures file.
  @user = @organization.users.build(xml_file: emptymap)
end

test "should be valid" do
  assert @user.valid?
end

这会产生错误(参考测试中的 @user 行):

NoMethodError: undefined method `users' for #<Organization:0x00000008a41d18>

如果我将 def setup 中的 @user 行更改为 @user = @organization.user.build(xml_file: emptymap),它会生成错误消息:NoMethodError: undefined methodbuild' for nil:NilClass`。所以这似乎也不是。

知道我做错了什么吗?

build 因为你使用它只适用于集合。因为您在 User belongs_to :organizationOrganization 中有一个 :user` 您没有集合,所以您有一对一的关系。

所以正确的属性是@organization.user

一对一关系有一种特殊的格式...build_(something)

@organization.build_user(xml_file: emptymap)

检查字符串 xml_file 以查看 what.it 包含。您是否已将上传者与其相关联?