Ruby on rails Rails 4.2:从属于到有许多使用条件
我有三张活动唱片。 Order,其中包含多个OrderItems。还有一个名为status的字段。 OrderItem,它属于订单和脚本 脚本,其中包含许多OrderItems 我想在脚本模型中设置has_many,以便只提供属于状态为“paid”的订单的OrderItems 我是rails新手,这不是我的代码库,所以我有点挣扎。我见过其他答案使用:include和:conditions关键字,但这两个关键字在rails 4.2中都无效Ruby on rails Rails 4.2:从属于到有许多使用条件,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,has-many,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,Has Many,我有三张活动唱片。 Order,其中包含多个OrderItems。还有一个名为status的字段。 OrderItem,它属于订单和脚本 脚本,其中包含许多OrderItems 我想在脚本模型中设置has_many,以便只提供属于状态为“paid”的订单的OrderItems 我是rails新手,这不是我的代码库,所以我有点挣扎。我见过其他答案使用:include和:conditions关键字,但这两个关键字在rails 4.2中都无效 任何帮助都很好。以下是如何设置只包含属于付费订单的项目的h
任何帮助都很好。以下是如何设置只包含属于付费订单的项目的has\u many:order\u项目:
class Script < ActiveRecord::Base
has_many :order_items, -> {
includes(:order).where(orders: {status: 'paid'})
}
end
类脚本我会通过确保模型不会过多地参与定义其他模型的行为来保持事物的纯粹性 首先定义订单的范围,定义“付费”的含义 然后,您可以将OrderItems与已付款订单关联
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)}
因此,现在每种模式都有自己的业务
has_many :order_items, -> {merge(OrderItem.for_paid_orders)}