Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4.2:从属于到有许多使用条件_Ruby On Rails_Ruby_Ruby On Rails 4_Activerecord_Has Many - Fatal编程技术网

Ruby on rails 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

我有三张活动唱片。 Order,其中包含多个OrderItems。还有一个名为status的字段。 OrderItem,它属于订单和脚本 脚本,其中包含许多OrderItems

我想在脚本模型中设置has_many,以便只提供属于状态为“paid”的订单的OrderItems

我是rails新手,这不是我的代码库,所以我有点挣扎。我见过其他答案使用:include和:conditions关键字,但这两个关键字在rails 4.2中都无效


任何帮助都很好。

以下是如何设置只包含属于付费订单的项目的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)}