使用HStore和rails 4的动态表单

时间:2013-10-08 03:40:56

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 hstore

我关注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

如果有帮助,我可以发布更多代码。谢谢!

1 个答案:

答案 0 :(得分:1)

ActiveRecord的Rails4 PostgreSQL驱动程序应该对PostgreSQL的hstore类型具有本机支持,因此您根本不需要使用serialize。尝试放弃serialize

BTW,当您尝试将某些对象序列化为YAML时,!将出现在YAML字符串中:

"--- !ruby/object:SomeClassName ..."

如果PostgreSQL期望看到!字符串,hstore可能会导致一些问题。