在代码中使用模型和迁移
Using models and migrations in code
我试图解决我在 Rails 应用程序的 Ruby 中尝试解决的问题,但经过三天的搜索和尝试,我似乎获得了狭隘的视野并且我卡住了:
我有产品和商店,一个产品可以在很多商店销售。该产品的价格可能因商店而异,我想创建每个商店的价格历史记录,因此我想将价格信息保存在单独的 table.
中
我创建了以下迁移:
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_shopstable?我如何检索与产品一起返回的数据,以便我获得产品信息以及所有拥有该产品的商店以及每家商店的最新价格?
如果您需要存储价格历史记录以便能够获得最后价格或类似的东西,恐怕您当前的 products_shops
table 不会很有用
您可以创建一个单独的 Price
模型和 prices
table,假设包含 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
将给出商店中产品的最后价格。
我试图解决我在 Rails 应用程序的 Ruby 中尝试解决的问题,但经过三天的搜索和尝试,我似乎获得了狭隘的视野并且我卡住了:
我有产品和商店,一个产品可以在很多商店销售。该产品的价格可能因商店而异,我想创建每个商店的价格历史记录,因此我想将价格信息保存在单独的 table.
中我创建了以下迁移:
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_shopstable?我如何检索与产品一起返回的数据,以便我获得产品信息以及所有拥有该产品的商店以及每家商店的最新价格?
如果您需要存储价格历史记录以便能够获得最后价格或类似的东西,恐怕您当前的 products_shops
table 不会很有用
您可以创建一个单独的 Price
模型和 prices
table,假设包含 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
将给出商店中产品的最后价格。