不确定如何解决我在选择个人时遇到的问题 来自数组的id。
我有商店,产品和价格的模型。商店有很多 (has_many)产品,产品每个商店有一个(has_one)价格。 我用CSV数据为数据库播种。我的应用程序主要仅用作API。
Price.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
答案 0 :(得分:0)
不要将数组数据类型用于price_id的价格,只需使用整数并为每个商店/产品组合分别记录
然后尝试使用has_one通过价格
class Product < ActiveRecord::Base
belongs_to :store
has_one :price, through: :store
在您的控制器中尝试预加载而不是包含,这应该生成2个查询,一个用于产品,一个用于具有正确where子句的价格
@products = Product.where(store_id: params[:id]).preload(:price)