我正在尝试将数组保存到Postgresql DB。听起来很简单。在成功完成条形支付后,我正在创建订单。
#stripe stuff (omitted)
Order.new(
:shipping_price => @order_preview.shipping_price,
:grand_total => @amount,
:cart => @cart,
:items => @cart.line_items
)
@order.save #error here
我收到错误:
can't cast ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_LineItem to text
如果我理解正确,rails告诉我它无法将数组保存到我的数据库的文本列中。为什么不呢?
这就是我的迁移看起来......
def change
add_column :orders, :items, :text, array:true
end
我很感激帮助...
由于
编辑:现在尝试创建一个只有ID的数组......
:items => @cart.line_items.map { |l| l.product.id }
那给了我
PG::DatatypeMismatch at /charges
ERROR: column "items" is of type integer[] but expression is of type text at character 249
HINT: You will need to rewrite or cast the expression.
此外,在创建过程中引发错误时,我看到了正确的数组
items:[1, 2]
当然我需要用散列形式的ID保存数量,但是......我想从头开始。
答案 0 :(得分:2)
@cart.line_items
不是数组(它是一个ActiveRecord :: Relation),而@cart.line_items.to_a
不是一个字符串数组(它是一个LineItem数组)。
您必须传递一个字符串数组才能将其存储在text[]
列中。因此,您需要确定相应的字符串或将列类型更改为其他内容。