【问题标题】:Stop rails from escaping hstore array in views阻止 rails 在视图中转义 hstore 数组
【发布时间】:2014-11-02 19:01:41
【问题描述】:

我正在尝试使用 hstore 数组类型的 postgreSQL 列,一切似乎都运行良好。但是,我的视图转义了数组并将其转换为格式错误的字符串。我的代码如下所示:

迁移:

class AddVariantsToItem < ActiveRecord::Migration
  def change
    execute 'CREATE EXTENSION hstore'
    add_column :items, :variants, :hstore, array: true, default: []
  end
end

现在,如果我要在 rails 控制台 中使用 Item.last.variants,它会给我一个合适的数组

> Item.last.variants
#=> [{"name"=>"Small", "price"=>"12.00"}, {"name"=>"Medium", "price"=>"20.00"}]

但是,在苗条视图中使用完全相同的代码会给我一个转义字符串:

div
  = debug Item.last.variants

  / Gives me: 
  / '{"\"name\"=>\"Small\", \"price\"=>\"12.00\"","\"name\"=>\"Medium\", \"price\"=>\"20.00\""}'

使用raw==.html_save 不会改变任何东西。谁能告诉我我能做些什么吗?

【问题讨论】:

  • Item.last.variants.to_yaml 会得到什么?
  • 这不是同一个代码 - 你打电话给debug
  • 好吧,debug 给了我与将该变量放入 textarea 值完全相同的输出(这是我现在需要的)

标签: ruby-on-rails ruby postgresql hstore


【解决方案1】:

Item.last.variants 是一个数组。当将某些东西放到视野中时,它会被字符串化(我不确定,但我认为它是to_s 方法或inspect)。

我的建议是你不应该放置整个对象。在这个特定的示例中,我认为您应该对其进行迭代并手动显示数据。

【讨论】:

  • 嗯,这个问题要复杂得多。我正在尝试使用 ng-init 将该数组发布到角度控制器,这就是我需要它的原因。但是,我认为使用 json api 而不是以这种方式破解它会是一个更好的主意。还是谢谢。
猜你喜欢
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多