【问题标题】:How do I set a default value for an HStore field in a Ruby on Rails fixtures YAML file?如何为 Ruby on Rails 固定装置 YAML 文件中的 HStore 字段设置默认值?
【发布时间】:2013-09-08 05:09:02
【问题描述】:

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

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

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

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

这会导致rake test 失败,因为没有为必填字段提供值。

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

目前我知道:

  1. 不起作用

    one:
      # ...
      field_name:
        small: 2
        medium: 5
        large: 4
      # ...
    
  2. 这也不起作用

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

谢谢!

【问题讨论】:

  • 是否按照我描述的方式进行设置?
  • @derekyau 不,YAML 文件存在语法错误。
  • 啊,我明白了,现在可以使用了吗?

标签: ruby-on-rails postgresql yaml ruby-on-rails-4 hstore


【解决方案1】:

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

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

我不知道如何正确使用哈希,所以我只是硬编码。

【讨论】:

  • 我已授予您赏金,因为您拥有唯一有效的答案。虽然不优雅,但似乎还没有更好的方法来做到这一点。谢谢!
【解决方案2】:

基本上你要做的就是在 YAML 中生成一个哈希

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

【讨论】:

  • 问题 - 这似乎将哈希保存为“字符串”,给我错误undefined method 'keys' for "{\"prompt\"=&gt;\"Full name?\"}":String。你知道为什么会这样吗?
  • 你是如何解析你的 yaml 文件的?你得到的是 JSON 格式。
猜你喜欢
  • 1970-01-01
  • 2012-08-21
  • 2022-09-28
  • 1970-01-01
  • 2022-06-30
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多