1

アカウント、パッケージ、配達の3つのモデルを備えたRailsアプリがあります。最近の配達と返品を見つけるために、配達でAR::Relationスコープを使用しています。アカウントモデルでは、最近配信されたアカウントも検索する必要があります。 アカウントで同じ配信スコープを使用できますjoinsか? 現在、私は次のようなコードを使用しています(との重複に注意してくださいAccount.with_recent_returnsDelivery.recent_returns

# Package(id: integer, ident: string)

class Package < ActiveRecord::Base
  has_many :deliveries, :dependent => :destroy
end

# Delivery(id: integer, account_id: integer, delivered_on: date, package_id: integer, returned_on: date)`

class Delivery < ActiveRecord::Base

  belongs_to :account
  belongs_to :package

  scope :current, where(:returned_on => nil)

  scope :recent_deliveries, where('delivered_on >= ?', 2.weeks.ago)

  scope :recent_returns, where('returned_on >= ?', 2.weeks.ago)

  scope :returns, where('returned_on IS NOT NULL')
end

#  => Account(id: integer, name: string)

class Account < ActiveRecord::Base

  has_many :deliveries, :dependent => :destroy

  def self.with_current_deliveries
    joins(:deliveries).where(:deliveries => { :returned_on => nil } ).includes(:deliveries)
  end


  def self.with_recent_returns
    joins(:deliveries).where('deliveries.returned_on >= ?', 2.weeks.ago).includes(:deliveries)
  end
end
4

1 に答える 1

0

私はこのようなものがうまくいくと信じています

scope :recent_deliveries, joins(:deliveries).merge(Delivery.recent)

または、スコープを使用する必要があるかもしれません

scope :recent_deliveries, scoped.joins(:deliveries).merge(Delivery.recent)

始める必要があります。

于 2012-05-31T15:49:12.213 に答える