如何正确使用序列化将数组和哈希值保存到数据库?

时间:2013-02-21 20:21:17

标签: ruby-on-rails ruby-on-rails-3 rails-activerecord

我在使用序列化时显然缺少一些相当基本的东西。我正在尝试将几个数组和哈希值保存到数据库记录中,我从控制器中的各种其他记录中提取数据库记录。我将它们列在页面上以便在保存之前检查它们,并将它们发布到我的创建操作的隐藏字段中。当我在页面视图中使用它们时,它们肯定是哈希和数组。但由于某种原因,它们会被保存为转义字符串。这是示例代码:

型号:

class Bulletin < ActiveRecord::Base
  serialize :news
  attr_accessible :news
end

查看:

<%= form_for(@bulletin) do |f| %>
  <%= f.hidden_field :news %>
  <%= f.submit "Create bulletin", class: "btn btn-large btn-primary" %>
<% end %>

控制器:

...
def new
  @bulletin = Bulletin.new
  create_news
  ...
end
def create
  @bulletin = Bulletin.new(params[:bulletin])
  ...
end
...
private
  def create_news
  ...
  if @bulletin.news == []
    @bulletin.news = [["No news", "No news submitted this week."]]
  end
end

我确实包含了最少的代码供您使用。例如,创建新闻函数中有更多代码,如果它存在,它实际上会生成嵌套的新闻数组。

我还应该注意到我确实有serialize :news, Array但它引发了一个错误“属性应该是一个数组,但它是一个字符串”。

编辑添加 -

生成的HTML(即输入):

<input id="bulletin_news" name="bulletin[news]" type="hidden" value="[[&quot;Bulletin User&quot;, &quot;A whole lot of news.&quot;], [&quot;Bulletin User&quot;, &quot;A whole lot of news.&quot;]]" />

这些是从测试数据库中提取的值对,并连接到嵌套数组中。还有更多的东西,为了便于阅读,我简短了。

从控制台查询记录时的输出:

"[[\"Bulletin User\", \"A whole lot of news.\"], [\"Bulletin User\", \"A whole lot of news.\"], [\"Another User\", \"A whole lot of news.\"], [\"Mr. Jovany Murazik\", \"A whole lot of news.\"]]"

0 个答案:

没有答案