2012-05-31 2 views
1

У меня есть приложение для рельсов с тремя моделями: учетная запись, пакет и доставка. Я использую области 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 

ответ

0

Я считаю, что-то, как это будет работать

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

или, возможно, вам нужно использование области видимости

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

вы должны начать.

+0

Спасибо. , , , , –

Смежные вопросы