我试图解决我试图在Ruby on Rails应用程序中解决的问题,但是经过三天的搜索和尝试,我似乎得到了洞察力并陷入困境:
我有商品和商店,并且许多商店都可以出售商品。该产品的价格在每个商店中可能有所不同,我想创建一个历史记录,以便在每个商店中保存价格信息。
我创建了以下迁移:
class CreateProducts < ActiveRecord::Migration[5.2]
def change
create_table :products do |t|
t.string :name
t.text :description
t.string :ean
t.text :category
t.belongs_to :shop, index: true
t.belongs_to :lists, index: true
t.timestamps
end
create_table :shops do |t|
t.string :name
t.string :url
t.integer :priority
t.timestamps
end
create_table :products_shops do |t|
t.belongs_to :products, index: true
t.belongs_to :shops, index: true
t.float :price
t.timestamps
end
end
end
以及以下型号:
class Product < ApplicationRecord
belongs_to :shops
end
class Shop < ApplicationRecord
has_many :products
end
我的问题: 如何将价格信息保存到products_shops表中?以及如何与产品一起检索数据,以便获得具有该产品的所有商店的产品信息以及每家商店最近的价格?
答案 0 :(得分:1)
如果您需要存储价格历史记录以获取最新价格或类似信息,恐怕您当前的products_shops
表不会很有用
您可以创建一个单独的Price
模型和prices
表,其中包含product_id
,shop_id
和实际price
。该模型将类似于
class Price < ApplicationRecord
belongs_to :product
belongs_to :shop
end
将has_many :prices
关联添加到products
和shops
可能很有用:
class Shop < ApplicationRecord
has_many :products
has_many :prices
end
class Product < ApplicationRecord
belongs_to :shops
has_many :prices
end
然后,您将能够为每对商店和产品节省多个价格,为每种产品获得所有价格,等等
例如,获取特定商店中产品的所有价格(即商店中产品的价格历史记录):
Price.where(product_id: your_product_id, shop_id: your_shop_id)
Price.where(product_id: your_product_id, shop_id: your_shop_id).order(:created_at).last
将给出商店中产品的最后价格。