【发布时间】:2017-10-31 04:33:56
【问题描述】:
当用户购买产品时,它会进入他的库存。所以只能销售库存产品。 Stock 表有一个 product_id 列。简单来说,当用户在 products/product_id 页面上时,订单必须是买入,而在股票/stock_id 页面上时,订单必须是卖出。
我只想使用一个表 Order,而不是创建两个表 buy_order 和 sell_order。
所以我创建了没有迁移的buy_order和sell_order模型,显然它继承自Order模型,以及控制器sell_orders和buy_orders。
我只是想知道这是否是只使用一张桌子的正确方法。
我的模特:
class Order < ApplicationRecord
belongs_to :product
end
class BuyOrder < Order
end
class SellOrder < Order
end
class Product < ApplicationRecord
has_many :buy_orders
has_many :sell_orders
has_many :stocks
end
class Stock < ApplicationRecord
belongs_to :product
end
我的控制器
class BuyOrdersController < ApplicationController
def create
...
order.type = 'buy'
...
end
end
class SellOrdersController < ApplicationController
def create
...
order.type = 'sell'
...
end
end
Routes.rb:
resources :products, only: [:index, :show] do
resources :buy_orders, only: [:create]
end
resources :stocks, only: [:index, :show] do
resources :sell_orders, only: [:create]
end
耙子路线:
products_orders POST /products/:product_id/buy_orders(.:format) orders#create
products_index GET /products(.:format) products#index
product GET /products/:id(.:format) products#show
stocks_orders POST /stocks/:stock_id/sell_orders(.:format) orders#create
stocks_index GET /stocks(.:format) stocks#index
stock GET /stock/:id(.:format) stocks#show
【问题讨论】:
-
解决这个问题的方法是使用 1 个带有
side列的表,例如,您可以在其中保存订单方(即“卖出”/“买入”) -
嗨@rod 检查这个github.com/hzamani/active_record-acts_as
-
@uzaif 你觉得这里需要继承吗?
-
这称为单表继承 (STI),它是一种常见模式。如果买/卖订单的属性集相同(是吗?),不确定这里是否有保证。无论如何,谷歌这个。
标签: ruby-on-rails ruby database model-view-controller