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 method
build' for nil:NilClass`。所以这似乎也不是。
知道我做错了什么吗?
build
因为你使用它只适用于集合。因为您在 User
belongs_to :organization
和 Organization
中有一个 :user` 您没有集合,所以您有一对一的关系。
所以正确的属性是@organization.user
一对一关系有一种特殊的格式...build_(something)
@organization.build_user(xml_file: emptymap)
检查字符串 xml_file 以查看 what.it 包含。您是否已将上传者与其相关联?
我在用户和组织之间有关系:
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 method
build' for nil:NilClass`。所以这似乎也不是。
知道我做错了什么吗?
build
因为你使用它只适用于集合。因为您在 User
belongs_to :organization
和 Organization
中有一个 :user` 您没有集合,所以您有一对一的关系。
所以正确的属性是@organization.user
一对一关系有一种特殊的格式...build_(something)
@organization.build_user(xml_file: emptymap)
检查字符串 xml_file 以查看 what.it 包含。您是否已将上传者与其相关联?