2

我正在关注这个 railscast,并完成了教程。一切正常。然后我决定用hstore代替序列化hash,设置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"

我用谷歌搜索,发现了一个类似的 SO question,但我使用的是 Rails 4,据说它不再需要使用那个 gem。

这是我的代码:

我的 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

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

4

1 回答 1

1

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

顺便说一句,!当您尝试将某些对象序列化为 YAML 时,a 将出现在 YAML 字符串中:

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

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

于 2013-10-08T04:25:43.893 回答