带有过滤器模型的has_many的Rails模型设计

时间:2017-03-09 12:21:49

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我有一个Client模型has_many :orders,但每个订单也belongs_to :order_type。这里的OrderType基本上用作过滤表,因为每个订单都有一组公共属性,如:category, :size, :date,并且有几千个条目,所以我将它保存在一个单独的模型中是有意义的,而不是将这些信息保存在每个订单输入中。

我对如何设置关联以及我需要连接表的位置感到有点困惑,所以我基本上可以查询这样的内容:

c = Client.find(x)
order_conditions = {date: "2016-01-01".."2016-01-31", category: "x")

我如何设置模型和关联/连接表,以便获得与给定客户端的某个OrderType条件列表匹配的所有订单?

根据this 12.1.3 Joining Multiple Associations

,我似乎需要在某个地方进行多次加入

2 个答案:

答案 0 :(得分:0)

你能不能

OrderType belongs_to:order

和 订单has_one:order_type

然后您可以找到所有具有匹配订单类型的订单。 (虽然我可能只是在订单数据库中包含order_type)

我是一个新手,如果这是废话,请道歉,请删除:)

答案 1 :(得分:0)

你应该试试

def Client
  has_many :orders
end

def Order
  belongs_to :client
  belongs_to :order_type
end

def OrderType
  has_many :orders
end


# To query
client.orders.joins(:order_type).where(order_types: { date: date })