【问题标题】:How can I get a hash of the contents of a Rails fixture instance?如何获取 Rails 夹具实例内容的哈希值?
【发布时间】:2015-03-28 03:00:01
【问题描述】:

这是使用 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 添加到测试类来获取实际的模型实例。但是,似乎没有任何 instance_methods 会以哈希格式转储夹具的模型实例 (test_entry) 以反馈给 .new 方法。

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

【问题讨论】:

    标签: ruby-on-rails ruby hash fixtures


    【解决方案1】:

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

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

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

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-10-24
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2017-07-10
      • 2012-07-06
      • 2015-10-01
      • 1970-01-01
      • 2015-10-17
      相关资源
      最近更新 更多