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

时间:2015-03-28 03:00:02

标签: ruby-on-rails ruby hash fixtures

这是使用Rails 4.2.0,Ruby 2.2.0。

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

  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形式的表达式访问fixture属性,因为YAML中指定的内容将自动插入到数据库中并加载。这个问题是我必须手动为YAML中指定的对象重新键入一堆属性名称,这看起来很傻。

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

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

1 个答案:

答案 0 :(得分:3)

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

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

您还可以根据需要删除属性:

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

希望这有帮助。