序列化ActiveRecord :: Coders :: Hstore崩溃RailsAdmin

时间:2013-02-16 19:58:56

标签: ruby-on-rails ruby rails-admin

根据http://railscasts.com/episodes/345-hstore的建议,我补充道:

serialize :properties, ActiveRecord::Coders::Hstore

到我的模特。这允许我在视图中迭代键/值对(没有它,我得到一个未定义的方法`每个'用于String错误):

<% @item.properties.try(:each) do |key, value| %>
  <%= key %>: <%= value %><br />
<% end %>

我设法通过明确地将其声明为文本字段来获取RailsAdmin中的hstore字段:

class Item < ActiveRecord::Base
  attr_accessible :name, :properties, as: :admin

  serialize :properties, ActiveRecord::Coders::Hstore  

  rails_admin do # without this block, properties gets ignored in RailsAdmin
    edit do
      field :name
      field :properties, :text
    end
  end
end

如果我上面的序列化调用已停用,我可以按以下格式在RailsAdmin中设置哈希值:

"key1" => "value1", "key2" => "value2"

但是,当没有注释掉序列化调用时(为了使视图中的循环起作用),RailsAdmin在保存哈希时崩溃:

undefined method `map' for String

怎么办?

1 个答案:

答案 0 :(得分:0)

我相信你可以做到这一点:

serialize :properties

这应该与each方法一起使用 然后:属性将被识别为哈希,而不是字符串 HStore应该是可选的。

:属性应该是架构中的字符串
(我想当你设置HStore插件时 - 你把hstore类型改为字符串)