ruby-on-rails ActiveRecord中的PostgreSQL jsonb字段belongs_to关联

jbose2ul  于 5个月前  发布在  Ruby
关注(0)|答案(3)|浏览(49)

我可以在belongs_to关联中使用jsonb字段作为foreign_key吗?

belongs_to :product, class_name: "Product",  foreign_key: "data ->'product_id'"

字符串

5vf7fwbs

5vf7fwbs1#

引用只能在列(或列组)之间定义,如the documentation中所述:
FOREIGN KEY(column_name [,... ])REFERENCES reftable [(refcolumn [,... ])]

uurity8g

uurity8g2#

您可以使用activerecord-json-associations来使用PostgreSQL JSONB字段来存储模型的关联信息

jqjz2hbq

jqjz2hbq3#

正如在@klin给answer的评论中所讨论的那样,不可能在ActiveRecord中开箱即用。
然而,我想出了一个更好的可维护方法,在我的项目中类似的情况下。
我正在利用一个数据库特性(如果你能控制底层数据库的话)--生成列或者虚拟列非常适合这个任务

ALTER TABLE orders ADD COLUMN product_id BIGINT GENERATED ALWAYS AS (CAST(data->>'product_id' AS BIGINT)) STORED;
CREATE INDEX IF NOT EXISTS "index_orders_on_product_id" ON "cq_shopify"."orders" ("product_id");

字符串
现在,您正在让DB做它最擅长的事情-存储数据并运行存储的过程以维护数据完整性。
既然你现在有了一个名为product_id的虚拟或生成字段,你可以在Rails应用中使用普通的belongs_to :products
要将其保留在项目中-只需将其作为迁移添加到代码中。

相关问题