如何获取 Rails 夹具实例内容的哈希值?

How can I get a hash of the contents of a Rails fixture instance?

这是使用 Rails 4.2.0, Ruby 2.2.0.

我想做的是使用夹具对象中包含的数据来验证在插入同一数据库之前是否捕获了重复项:

  test "identical entries should be impossible to create" do
    dup_entry = Entry.new(entries(:test_entry))
    assert_not dup_entry.save
  end

(其中 Entry 是具有控制器方法 .new 的定义明确的模型,而 test_entry 是包含一些有效 Entry 实例的夹具。)

不幸的是,这不起作用,因为 entries(:test_entry) 将成为 Entry,而不是 Entry.new 接受的散列。

我知道我可以在相关测试中使用 fixture_objname.property 形式的表达式访问夹具属性,因为 YAML 中指定的任何内容都会自动插入到数据库中并加载。这样做的问题是,我必须为我刚刚在 YAML 中指定的对象手动重新键入一堆 属性 名称,这看起来很愚蠢。

The documentation 还说我可以通过将 self.use_instantiated_fixtures = true 添加到测试 class 来获取实际的模型实例。但是,似乎没有任何 instance_methods 会以散列格式转储灯具的模型实例 (test_entry) 以反馈给 .new 方法。

是否有一种惯用的方法来获得我想要的东西,或者有一种不同的、更简单的方法吗?

我相信您正在寻找类似的东西:

entries(:test_entry).attributes
entries(:test_entry).attributes.class # => Hash

如果需要,您也可以删除属性:

entries(:admin).attributes.except("id")

希望对您有所帮助。