Rails 4.2:HAS_MANY使用属于属性的条件



我有三个activerecords。订单,其中有命令。还有一个名为状态的字段。OrderItem,属于订单和脚本脚本,has_many orderitems

我想在脚本模型中设置has_many,以便只给出具有"付费"状态的订单的订单。

我是Rails的新手,这不是我的代码库,所以我有点挣扎。我看过其他答案使用:inclage and:条件关键字,但在铁轨4.2

中都不有效。

任何帮助都很棒。

我会尝试通过确保模型不太参与定义其他模型的行为。

来保持纯洁。

首先定义命令以定义"付费"的含义的范围。

def self.has_been_paid
  where(status: "Paid")
end

然后,您可以将订单网络与付费订单相关联。

belongs_to :paid_order, -> {merge(Order.has_been_paid)}, :class_name => "Order", :foreign_key => :order_id

...和范围...

def self.for_paid_orders
  joins(:paid_order)
end

然后是脚本:

has_many :order_items, -> {merge(OrderItem.for_paid_orders)}

所以现在每个模型都照顾自己的业务。

这是设置a has_many:order_items的方法,仅包括属于付费订单的项目:

class Script < ActiveRecord::Base
  has_many :order_items, -> {
    includes(:order).where(orders: {status: 'paid'})
  }
end

相关内容

  • 没有找到相关文章

最新更新