无法将ActiveRecord :: Associations :: CollectionProxy强制转换为文本

时间:2014-06-12 23:10:15

标签: ruby-on-rails ruby rails-activerecord

我正在尝试将数组保存到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保存数量,但是......我想从头开始。

1 个答案:

答案 0 :(得分:2)

@cart.line_items不是数组(它是一个ActiveRecord :: Relation),而@cart.line_items.to_a不是一个字符串数组(它是一个LineItem数组)。

您必须传递一个字符串数组才能将其存储在text[]列中。因此,您需要确定相应的字符串或将列类型更改为其他内容。