在代码中使用模型和迁移

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_idshop_id 和实际 price。该模型看起来像

class Price < ApplicationRecord
  belongs_to :product
  belongs_to :shop
end

has_many :prices 关联添加到 productsshops:

可能会有用
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 将给出商店中产品的最后价格。