铁路:一张桌子有两种型号

时间:2017-10-31 04:33:56

标签: ruby-on-rails ruby database model-view-controller

当用户购买产品时,它会转到他的库存。因此,只有库存产品才能销售。库存表有一个product_id列。简单来说,当用户在产品/ product_id页面上订单必须是买入时,在库存/ stock_id页面订单时必须卖出。

我想只使用一个表订单,而不是创建两个表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

Rake Routes:

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 个答案:

答案 0 :(得分:1)

我无法看到将您的&#34; order&#34;分开的用法。模型分为两个不同的模型。就个人而言,我选择了简单。在您的订单表中,属性side可以是sellbuyproduct会有很多orders,每个product属于class Product < ApplicationRecord has_many :orders has_many :stocks end

Product.first.orders.where(side: 'sell')

然后您可以轻松地参考像:

这样的一面
sell

将检索第一条产品记录的所有{{1}}订单。