【发布时间】:2013-10-03 18:31:09
【问题描述】:
我已经序列化了Product的属性属性
class Product < ActiveRecord::Base
serialize :properties, Hash
产品表 (sqlite3) 的文本列“属性”包含以下内容:
---
:article: shirt
:size: L
:color: red
当我从控制台检索产品的属性时,我会获得一个哈希值,我可以毫无问题地对其进行修改和保存。 Ruby 完美地对其进行序列化和反序列化。 然后我尝试使用 fields_for 为每个属性构建一个带有一个 text_field 的 _form.html.erb:
<%= form_for(@product) do |f| %>
[....]
<div class="field">
<%= f.fields_for :properties, OpenStruct.new(@product.properties) do |property_form| %>
<%= f.label :properties %><br />
<% @product.properties.keys.each do |k| %>
<%= property_form.label k %><br />
<%= property_form.text_field k, :value => @product.properties[k] %>
<% end %>
<% end %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
当我编辑一个产品时,这段代码创建了 3 个填充了正确值的 text_fields,但是当我尝试保存它时,我得到:
"ERROR TypeError: 参数'properties'的预期哈希(得到字符串)"
怎么了?我已经阅读了很多类似问题的一些解决方案,我遵循了不同的方法,如this 或Railscast#403 中的建议,但我总是陷入这种错误。我可能错过了一些东西,但我找不到什么。任何想法? (ruby-2.0.0-p247,Rails 4.0.0)
非常感谢!
【问题讨论】:
标签: ruby-on-rails ruby serialization hash ruby-on-rails-4