我关注this railscast,并完成了教程。一切都很好。然后我决定使用hstore而不是序列化哈希,并在设置hstore后遇到错误:
PG::Error: ERROR: Syntax error near '!' at position 4 : INSERT INTO "products" ("product_type_id", "created_at", "properties", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"
我用Google搜索,找到了similar SO question,但我正在使用Rails 4,据说不再需要使用该宝石。
这是我的代码:
我的form.html.haml的相关部分看起来像这样
= f.fields_for :properties, OpenStruct.new(@product.properties) do |builder|
- @product.product_type.products.each do |product|
= render "products/fields/#{product.field_type}", field: field, f: builder
我的产品型号如下所示:
class Product < ActiveRecord::Base
belongs_to :product_type
serialize :properties
end
如果有帮助,我可以发布更多代码。谢谢!
答案 0 :(得分:1)
ActiveRecord的Rails4 PostgreSQL驱动程序应该对PostgreSQL的hstore
类型具有本机支持,因此您根本不需要使用serialize
。尝试放弃serialize
。
BTW,当您尝试将某些对象序列化为YAML时,!
将出现在YAML字符串中:
"--- !ruby/object:SomeClassName ..."
如果PostgreSQL期望看到!
字符串,hstore
可能会导致一些问题。