has_one关系的集成测试失败

时间:2015-05-18 21:23:20

标签: ruby-on-rails ruby ruby-on-rails-4 integration-testing

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

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`。所以这似乎也不是。

知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

sudo chown -R (whoami) /usr/local 因为你使用它只适用于集合。由于您在build User并且在belongs_to :organization中有一个:user`您没有集合,因此您具有一对一的关系。

所以正确的属性是Organization

并且有一种特殊的一对一关系格式...... @organization.user

build_(something)

答案 1 :(得分:0)

检查字符串xml_file以查看what.it包含的内容。你有一个上传者吗?