У меня есть приложение для рельсов с тремя моделями: учетная запись, пакет и доставка. Я использую области AR :: Relation для доставки, чтобы найти последние поставки и возврат. Модели Account также необходимо найти учетные записи с недавними поставками. Могу ли я использовать те же области доставки на Счете через joins
? Сейчас я использую такой код (обратите внимание на дублирование в Account.with_recent_returns
и Delivery.recent_returns
):Использование ActiveRecord :: Отношения между моделями
# 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
Спасибо. , , , , –