我如何在Ruby on Rails fixtures YAML文件中为HStore字段设置默认值?

8

我正在尝试使用Ruby on Rails 4.0 HStore扩展来操作PostreSQL。我想将我的HStore字段之一设为必需:

class Thing < ActiveRecord::Base
  # ...
  validates :field_name, presence: true
  # ...
end

作为一个HStore的新手,我使用rails g scaffold Thing field_name:hstore生成了Thing的脚手架。这样做后,我的fixture文件(test/fixtures/things.yml)没有为field_name指定默认值:

one:
  # ...
  field_name:
  # ...

由于必填字段没有提供值,导致rake test失败。

我的问题是:如何在我的固件YAML文件中为field_name设置一个值,以便我的测试能够通过?

目前我知道的是:

  1. This does not work:

    one:
      # ...
      field_name:
        small: 2
        medium: 5
        large: 4
      # ...
    
  2. This also does not work:

    one:
      # ...
      field_name: {"small"=>"2", "medium"=>"5", "large"=>"4"}
      # ...
    

谢谢!


按照我描述的方式设置是否有效? - derekyau
@derekyau 不,YAML文件中有语法错误。 - user636044
2个回答

11

基本上您需要做的是在YAML中生成一个哈希。

default:
  options:
    :something: 2
    :something_else: 3

问题 - 这似乎将哈希保存为“字符串”,导致我出现错误 undefined method 'keys' for "{\"prompt\"=>\"Full name?\"}":String。你知道这是为什么吗? - sscirrus
你是如何解析你的yaml文件的?你得到的是JSON格式。 - Alan Tan

11

我正在使用Rails 4,这是我的fixture文件,其中options是一个hstore字段。

default:
  title: 'something'
  prefix: 'xxx'
  options: '"something"=>"2", ""=>"5"'

我找不到正确使用哈希的方法,所以我只是硬编码了它。


我已经授予您赏金,因为您是唯一一个有效的答案。虽然不够优雅,但目前似乎没有更好的方法。谢谢! - user636044

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接