【问题标题】:serialize ActiveRecord::Coders::Hstore crashes RailsAdmin序列化 ActiveRecord::Coders::Hstore 崩溃 RailsAdmin
【发布时间】:2013-02-16 19:58:56
【问题描述】:

按照http://railscasts.com/episodes/345-hstore 的建议,我补充说:

serialize :properties, ActiveRecord::Coders::Hstore

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

<% @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

怎么办?

【问题讨论】:

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


    【解决方案1】:

    我相信你可以这样做:

    serialize :properties
    

    这应该适用于each 方法。
    然后 :properties 将被识别为哈希,而不是字符串。
    HStore 应该是可选的。

    :properties 在你的架构中应该是字符串
    (我认为当您设置 HStore 插件时 - 您输入的是 hstore 类型而不是字符串)

    【讨论】:

    • 刚试过,可惜没用,视图中出现同样的“undefined method `each' for String”错误
    • 你是这样分配哈希的吗? @item.properties = {"key1" =&gt; "value1", "key2" =&gt; "value2"}
    • 你使用的是什么 Rails 版本?
    • 我使用的是 Rails 3.2.11。数据类型是 hstore (PostgreSQL)。如果我使用 Rails 控制台,我可以使用 hstore 查询接口与 hstore/hash 进行交互。
    • 是的,我尝试了 {"key1" => "value1", "key2" => "value2"} 和其他方法,似乎都没有奏效
    猜你喜欢
    • 1970-01-01
    • 2015-09-22
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2019-10-08
    相关资源
    最近更新 更多