【发布时间】:2018-05-04 22:12:20
【问题描述】:
我有一个 Postgres 数据库。我的一张表中的一列由数组组成。它被称为aliases。我正在尝试合并两个实例,但是当我尝试合并数组时,它们并没有保存。
irb(main):001:0> original
=> #<Thing id: 1, name: "Foo", aliases: ["Foo"]>
irb(main):002:0> duplicate
=> #<Thing id: 2, name: "Bar", aliases: ["Bar"]>
irb(main):003:0> original.aliases | duplicate.aliases
=> ["Foo", "Bar"]
irb(main):004:0> original.save!
(0.3ms) BEGIN
Thing Exists (0.8ms) SELECT 1 AS one FROM "thing" WHERE "things"."name" = $1 AND ("thing"."id" != $2) LIMIT $3 [["name", "Foo"], ["id", 1], ["LIMIT", 1]]
(0.3ms) COMMIT
Thing Store (6.1ms) {"id":1}
=> true
但是当我检查original 时,别名并没有合并。
irb(main):005:0> original
=> #<Thing id: 1, name: "Foo", aliases: ["Foo"]>
我尝试了几种不同的方法将duplicate.aliases 插入original.aliases,但似乎没有任何保存。任何想法为什么?我错过了什么吗?
编辑: 我在 Rails 5.1.4 和 Ruby 2.5.0p0
【问题讨论】:
-
a | b不会修改a。当您original.aliases = original.aliases | duplicate.aliases; original.save!时会发生什么?还是original.aliases |= duplicate.aliases? -
@muistooshort 好点。
original.aliases = original.aliases | duplicate.aliases;在 Rails 控制台中输入时有效,但由于某种原因在工作人员运行时无效。任何想法为什么? -
放弃那个。现在似乎工作正常。谢谢@muistooshort。如果您添加为答案,我可以接受。
-
科迪在他的回答中所说的几乎是一样的,所以我建议接受那个。
标签: ruby-on-rails arrays activerecord