我有三个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