在我使用序列化的过程中,我显然遗漏了一些相当基本的东西。我正在尝试将几个数组和哈希保存到数据库记录中,这些记录是从控制器中的各种其他记录中提取的。我在页面上列出它们以在保存之前检查它们,并将它们张贴在隐藏字段中以进行我的创建操作。当我在页面视图中使用它们时,它们肯定是哈希和数组。但是由于某种原因,它们被保存为转义字符串。这是示例代码:
模型:
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
我已经在其中包含了最少的代码供您获取。例如,create news 函数中有更多代码,如果存在,它实际上会生成一个嵌套的新闻数组。
我还应该注意,我确实有serialize :news, Array
,但它抛出了一个错误“属性应该是一个数组,但是是一个字符串”。
编辑添加 -
生成的 HTML(即输入):
<input id="bulletin_news" name="bulletin[news]" type="hidden" value="[["Bulletin User", "A whole lot of news."], ["Bulletin User", "A whole lot of news."]]" />
这些是从测试数据库中提取并连接到嵌套数组中的值对。还有很多,为了便于阅读,我把它缩短了。
从控制台查询记录时的输出:
"[[\"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.\"]]"