gpt4 book ai didi

ruby-on-rails - 通过 includes 从 id 数组中选择

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:34 25 4
gpt4 key购买 nike

不确定如何解决我在选择个人时遇到的问题来自数组的 id。

我有一个商店、产品和价格模型。商店有很多(has_many) 个产品,每个商店的产品有一个 (has_one) 个价格。我正在用 CSV 数据播种数据库。我的应用主要仅用作 API。

Prices.csv(其中 id 为 7 和 8 的产品价格相同在商店 3 中 4.25 美元):

amount,product_id,store_id
"3.49","{6}","3"
"4.25","{7,8}","3"

create_prices.rb:

create_table :prices do |t|
...
t.integer :product_id, array: true, default: []
... etc
end

当我尝试包含价格时,问题出现在我的查询中关联,我收到一条错误消息:

ActiveRecord::StatementInvalid
(PG::UndefinedFunction: ERROR: operator does not exist: integer[] =
integer LINE 1: ...LEFT OUTER JOIN "prices" ON "prices"."product_id" =
"product...

我认为问题与包含的价格格式不正确以处理数组有关?

产品负责人:

class API::ProductsController < ApplicationController
@products = Product.where("products.store_id @> '{?}'", params[:id].to_i).includes(:price).where('prices.store_id = ?', params[:id]).references(:prices).limit(params[:max])
end

Product.rb 模型:

class Product < ActiveRecord::Base
belongs_to :store
has_one :price

def as_json(options)
super(:only => [:id, :name, :description, :image, :weight, :store_id],
:include => {
:price => {:only => [:amount, :store_id]}
}
)
end
end

最佳答案

不要对价格 product_id 使用数组数据类型,只需使用整数并为每个商店/产品组合单独记录

然后尝试使用 has_one through 获取价格

class Product < ActiveRecord::Base
belongs_to :store
has_one :price, through: :store

在您的 Controller 中尝试预加载而不是包含,这应该会生成 2 个查询,一个用于产品,一个用于带有正确 where 子句的价格

@products = Product.where(store_id: params[:id]).preload(:price)

关于ruby-on-rails - 通过 includes 从 id 数组中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com